【问题标题】:regex extract exact one string正则表达式提取精确的一个字符串
【发布时间】:2022-11-30 23:26:03
【问题描述】:

我有两个字符串:

  1. “约翰·约翰逊电话号码”
  2. “John Johnson 备用电话号码”

    需要提取第一个,名字和姓氏可能会改变

    我将第一个字符串与此正则表达式匹配,因为姓名和姓氏可能会更改。

    ^\w+ \w+( \w+)? Phone Number$
    

    看起来很容易,但我的大脑冻结几个小时无法解决它。 现在发布相同的正则表达式拾取我不想拾取的第二个字符串。

    也许有人可以给我提示如何只匹配第一个字符串?谢谢

【问题讨论】:

  • 你的实际问题是什么?周围的 Go 代码是什么样的,字符串是如何表示的?

标签: regex go


【解决方案1】:

如果我理解正确的话,你想要捕获整个字符串,并提取“电话号码”之前的单词。您可以使用捕获组执行此操作。您可以将捕获组命名为这样您就不必担心该组位于哪个索引号(如果您稍后添加/删除组)。

语法是(?P<name>...)

因此,对于您的情况,我将前两个w+ 放入捕获组name。返回的matches 是在索引 0 中匹配的完整字符串。后面的索引是子组。您可以使用 re.SubexpIndex("name") 为命名的子组 name 找到正确的子组索引。

https://goplay.tools/snippet/dcwWg3FBWUd

    re := regexp.MustCompile(`^(?P<name>w+ w+)( w+)? Phone Number$`)
    str := "John Johnson Alternate Phone Number"
    index := re.SubexpIndex("name")
    matches := re.FindStringSubmatch(str)
    if len(matches) > 0 {
        fmt.Printf("Name: %s
", matches[index])
    } else {
        fmt.Println("No Match")
    }

【讨论】:

    猜你喜欢
    • 2015-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-10
    • 2017-06-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多