regex 正则表达式提取精确的一个字符串

jgovgodb  于 2022-12-01  发布在  其他
关注(0)|答案(1)|浏览(139)

我有两个字符串:
1.“John Johnson电话号码”
1.“John Johnson备用电话号码”
需要提取第一个,姓名和姓氏可能会更改
我用这个正则表达式匹配第一个字符串,因为名字和姓氏可能会改变。

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

看起来很容易,但我的大脑冻结不能解决它几个小时。问题现在,相同的正则表达式拿起第二字符串,我不想被拿起。
也许有人可以给我一个提示,如何匹配只第一个字符串,而不采取字符串包含替代字?谢谢

ijnw1ujt

ijnw1ujt1#

如果我没理解错的话,您希望捕获整个字符串,并提取“Phone number”前面的单词。您可以对捕获组执行此操作。您可以将捕获组命名为,这样就不必担心该组位于哪个索引号(如果以后添加/删除组)。
语法为(?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\n", matches[index])
    } else {
        fmt.Println("No Match")
    }

相关问题