python中所有格量词的替代

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

Articles[0-9]++(?!()

搜索以下字符串:

Article 29
Article 30(1)

这与Article 30(1)不符(正如我预期的那样),但Article 29 Article 1Article 1 Article 29不符。

当尝试在Python(3)中使用相同的方法时

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

由于我使用Python正则表达式不支持的(嵌套的)所有格量词,因此我得到以下错误。 有没有什么方法可以匹配我希望它(不)匹配的Python?


Python的re不支持占有欲量词。 您可以考虑使用Python PyPi正则表达式模块,它支持这种类型的量词。 或者使用以下解决方法。

您需要向前瞻添加数字:

Articles[0-9]+(?![(0-9])
                    ^^^   

看到这个正则表达式演示。

或者,使用字边界:

Articles[0-9]+b(?!()
                ^

看到这个正则表达式演示。


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

(?=(Articles[0-9]+))1(?!()

(一个先行的行为像一个原子组,所有你需要的是一个捕获和一个反向引用)

链接地址: http://www.djcxy.com/p/76935.html

上一篇: Alternative to possessive quantifier in python

下一篇: java regex reluctant quantifier giving greedy quantifier