如果正则表达式中存在子字符串,如何排除以'('开头的子字符串?

时间:2019-02-05 12:07:03

标签: regex

正则表达式:

([A-Za-z]+),\s([A-Za-z]+)\.\s(.*)[\s\(|\b]

测试字符串:

Futrelle, Mrs. Jacques Heath(Lily May Peel)
Heikkinen, Miss. Laina

正则表达式问题屏幕截图:

enter image description here

预期:

  • “ Jacques Heath”作为第一行捕获组3
  • “ Laina”作为第二行的捕获小组3

实际:

  • “雅克·希思(莉莉·梅·皮尔)”作为捕获组3出现在第一行
  • “ Laina”作为第二行的捕获小组3

编辑:

对我的答案做了一些修改:

([A-Za-z]+)\,\s*([A-Za-z]+)\.\s*(.*?)(?:\s*\(|$)

请参见regex demo

enter image description here

1 个答案:

答案 0 :(得分:1)

请注意,(.*)[\s(|\b]会匹配并捕获尽可能多的0+个字符,直到最后一个空格(\s),(|或一个空格字符[\s(|\b]是一个肯定的字符类,其中\b不是单词边界,它失去了零宽度的含义,并且|被解析为文字管道字符。

您可以使用negated character class模式,[^(]*(或[^(]+):

([A-Za-z]+),\s([A-Za-z]+)\.\s([^(]*)
                             ^^^^^^^

请参见regex demo

要考虑可变数量的空白字符,可以使用

([A-Za-z]+),\s*([A-Za-z]+)\.\s*([^(]*)
            ^^^             ^^^

其中\s*匹配0个或多个空格字符。