python 中所有格量词的替代方法

Alternative to possessive quantifier in python

我正在尝试匹配字符串 Article 后跟一个数字(一个或多个数字)的所有出现,这些数字是 而不是 后跟一个左括号。在 Sublime Text 中,我使用以下正则表达式:

Article\s[0-9]++(?!\()

搜索以下字符串:

Article 29
Article 30(1)

Article 30(1) 不匹配(如我所料),但 Article 29Article 1.

当尝试在 Python (3) 中使用

执行相同操作时
import re
article_list = re.findall(r'Article\s[0-9]++(?!\()', "Article 30(1)")

我收到以下错误,因为我正在使用 Python 正则表达式不支持的(嵌套)所有格量词。有什么方法可以匹配我想要(不)匹配的 Python?

Python re 不支持所有格量​​词。您可以考虑使用支持此类量词的 Python PyPi regex module。或者使用以下解决方法。

您需要在前瞻中添加一个数字:

Article\s[0-9]+(?![(0-9])
                    ^^^   

this regex demo

或者,使用单词边界:

Article\s[0-9]+\b(?!\()
                ^

参见 this regex demo

您还可以使用 (?=(...)) 解决方法围绕您要匹配的内容模拟原子组 (?>...)

(?=(Article\s[0-9]+))(?!\()

(先行自然地表现得像一个原子组,你只需要一个捕获和一个反向引用)