替代python中的占有量词

use*_*ser 7 python regex quantifiers

我试图匹配所有出现的字符串Article后跟一个数字(单个或多个数字),后面没有一个左括号.在Sublime Text中,我使用以下正则表达式:

Article\s[0-9]++(?!\()
Run Code Online (Sandbox Code Playgroud)

搜索以下字符串:

Article 29
Article 30(1)
Run Code Online (Sandbox Code Playgroud)

哪个不匹配Article 30(1)(正如我预期的那样)但是Article 29Article 1.

尝试在Python(3)中使用时也一样

import re
article_list = re.findall(r'Article\s[0-9]++(?!\()', "Article 30(1)")
Run Code Online (Sandbox Code Playgroud)

我得到以下错误,因为我正在使用Python正则表达式不支持的(嵌套)所有格量词.有没有办法匹配我想要它(不)在Python中匹配?

Cas*_*yte 6

您还可以(?>...)使用(?=(...))\1变通方法围绕要匹配的对象模拟原子组:

(?=(Article\s[0-9]+))\1(?!\()
Run Code Online (Sandbox Code Playgroud)

(先行行为自然就像一个原子团,您只需要捕获和反向引用即可)


Wik*_*żew 5

Pythonre不支持所有格量​​词。您可以考虑改用Python PyPi regex 模块,它支持这种类型的量词。或使用以下变通方法。

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

Article\s[0-9]+(?![(0-9])
                    ^^^   
Run Code Online (Sandbox Code Playgroud)

请参阅此正则表达式演示

或者,使用单词边界:

Article\s[0-9]+\b(?!\()
                ^
Run Code Online (Sandbox Code Playgroud)

请参阅此正则表达式演示