Python RegEx在Word之前停止

Cod*_*ard 2 python regex

我有一点RegEx我想弄清楚: ( of [A-Za-z ]+)?

我的正则表达式的上述部分将匹配以下内容:

新墨西哥州和史密斯夫人.

我想要做的是让RegEx停止之前and.

( of [A-Za-z ]+)\sand?

上面的RegEx非常接近解决问题,但它仍然匹配和.

以上匹配:

新墨西哥州和

我希望它输出:

新墨西哥州

Wik*_*żew 5

你可以使用一个驯化的贪婪令牌:

( of (?:(?!\band\b)[A-Za-z ])+)?
     ^^^^^^^^^^^^^^^^^^^^^^^^^
Run Code Online (Sandbox Code Playgroud)

请参阅正则表达式演示

(?:(?!\band\b)[A-Za-z ])+构造匹配在[A-Za-z ]字符类中定义的不是整个单词的1 +个字符and.

Python演示:

import re
p = re.compile(r'( of (?:(?!\band\b)[A-Za-z ])+)?')
s = " of New Mexico and Mrs Smith."
m = p.search(s)
if m:
    print(m.group().strip())
Run Code Online (Sandbox Code Playgroud)

  • 别客气.请注意,对于否定的字符类,可以将调节的贪婪令牌视为多字符"同义词".你不能使用`[^和] +`因为它不能匹配单个字符`a`,`n`和`d`.使用淬火贪婪令牌时,不允许匹配字符的*序列*. (2认同)