正则表达式提取一个字符串



我有两个字符串:

  1. "约翰·约翰逊电话号码";
  2. "约翰·约翰逊备用电话号码">

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

我正在用这个正则表达式匹配第一个字符串,因为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")
}

编辑:我认为这是一个很好的问题:

这仍然可以使用捕获组来提取相关的子匹配。

相关内容

最新更新