我有两个字符串:
- "约翰·约翰逊电话号码";
- "约翰·约翰逊备用电话号码">
需要提取第一个,名字和姓氏可能会改变
我正在用这个正则表达式匹配第一个字符串,因为Name和Last Name可能会改变。
^w+ w+( w+)? Phone Number$
似乎很简单,但我的大脑冻结了几个小时不能解决它。现在问题是相同的regex拾取第二个字符串,我不想被拾取。
也许有人可以给我一个提示如何匹配只有第一个字符串,不采取字符串,其中包含替代词?由于
如果我理解正确的话,您想捕获整个字符串,并提取"电话号码"之前的单词。您可以使用捕获组完成此操作。您可以为您的捕获组命名,这样您就不必担心组所在的索引号(如果稍后添加/删除组)。
语法为(?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: %sn", matches[index])
} else {
fmt.Println("No Match")
}
编辑:我认为这是一个很好的问题:
这仍然可以使用捕获组来提取相关的子匹配。