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 29
和Article 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中匹配?
您还可以(?>...)
使用(?=(...))\1
变通方法围绕要匹配的对象模拟原子组:
(?=(Article\s[0-9]+))\1(?!\()
Run Code Online (Sandbox Code Playgroud)
(先行行为自然就像一个原子团,您只需要捕获和反向引用即可)
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)
请参阅此正则表达式演示。