我有两个字符串:1.“John Johnson电话号码”1.“John Johnson备用电话号码”需要提取第一个,姓名和姓氏可能会更改我用这个正则表达式匹配第一个字符串,因为名字和姓氏可能会改变。
^\w+ \w+( \w+)? Phone Number$
看起来很容易,但我的大脑冻结不能解决它几个小时。问题现在,相同的正则表达式拿起第二字符串,我不想被拿起。也许有人可以给我一个提示,如何匹配只第一个字符串,而不采取字符串包含替代字?谢谢
ijnw1ujt1#
如果我没理解错的话,您希望捕获整个字符串,并提取“Phone number”前面的单词。您可以对捕获组执行此操作。您可以将捕获组命名为,这样就不必担心该组位于哪个索引号(如果以后添加/删除组)。语法为(?P<name>...)。因此,对于您的情况,我将前两个\w+放入捕获组name中。返回的matches是索引0中匹配的完整字符串。后面的索引是子组。您可以使用re.SubexpIndex("name")为命名的子组name查找正确的子组索引。https://goplay.tools/snippet/dcwWg3FBWUd
(?P<name>...)
\w+
name
matches
re.SubexpIndex("name")
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") }
1条答案
按热度按时间ijnw1ujt1#
如果我没理解错的话,您希望捕获整个字符串,并提取“Phone number”前面的单词。您可以对捕获组执行此操作。您可以将捕获组命名为,这样就不必担心该组位于哪个索引号(如果以后添加/删除组)。
语法为
(?P<name>...)
。因此,对于您的情况,我将前两个
\w+
放入捕获组name
中。返回的matches
是索引0中匹配的完整字符串。后面的索引是子组。您可以使用re.SubexpIndex("name")
为命名的子组name
查找正确的子组索引。https://goplay.tools/snippet/dcwWg3FBWUd