Python中替代占有量词的方法

12

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

Article\s[0-9]++(?!\()
搜索以下字符串:
Article 29
Article 30(1)

这与我预期的不符合第30条(1),而是符合第29条第1条

在Python 3中尝试使用以下代码:

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

我在使用Python正则表达式时遇到一个错误,提示我使用了(嵌套的)所有格量词,但Python不支持该量词。有没有办法在Python中匹配我想要(或不想要)匹配的内容?


2
Python 从 3.11 开始支持贪婪量词。 - ThatXliner
3个回答

9
您还可以模拟一个原子组(?>...)围绕您想匹配的内容,使用(?=(...))\1解决方法:
(?=(Article\s[0-9]+))\1(?!\()

(向前查找的行为自然地像一个原子组,你只需要一个捕获和反向引用)


5

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接