我这里有一个正则表达式,可以产生想要的效果,但是有点笨拙
https://regex101.com/r/WwxW6G/2
\(.*?, USA\)|\(USA, .*?\)|\(.*?, USA, .*?\)
输入:
Match Me! (USA, Europe)
Match Me! (Europe, USA)
Match Me! (Asia, USA, Europe)
Don't Match Me (USA)
Don't Match Me USA
USA Don't Match Me
Don't Match Me (USA)
我想知道是否有一种方法可以在没有几个OR的情况下进行操作-我不需要一个干净的括号来匹配,我只需要在检查中匹配正确的行即可。
非常感谢!
答案 0 :(得分:0)
在括号之间使用单个替换来检查美国前后的逗号,您可以使用:
答案 1 :(得分:0)
在这种情况下-当一个单词可以定界并且一个定界符是必须的,并且该单词的长度已知时-您可以从两种积极的观察中受益:
\([^)]*?USA(?:(?=,)|(?<=, ...))[^)]*\)
这将导致更快速的匹配。
答案 2 :(得分:0)
编辑并不是那么优雅,但我认为它是完整的:S。
我要去;)
\((?=[^,)]*,)(?=(?:[^)]*, )?\bUSA\b(?=,|\)))(?:\w+,?\s*)+\)
它使用正向前行来确保括号内有逗号(因此至少是两个词)以及USA
一词(因为我猜想这是一个要求-Q中未说明)。然后,它仅允许在括号内使用任意数量的逗号分隔的单词。