python 中所有格量词的替代方法
Alternative to possessive quantifier in python
我正在尝试匹配字符串 Article
后跟一个数字(一个或多个数字)的所有出现,这些数字是 而不是 后跟一个左括号。在 Sublime Text 中,我使用以下正则表达式:
Article\s[0-9]++(?!\()
搜索以下字符串:
Article 29
Article 30(1)
与 Article 30(1)
不匹配(如我所料),但 Article 29
和 Article 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])
^^^
或者,使用单词边界:
Article\s[0-9]+\b(?!\()
^
参见 this regex demo。
您还可以使用 (?=(...))
解决方法围绕您要匹配的内容模拟原子组 (?>...)
:
(?=(Article\s[0-9]+))(?!\()
(先行自然地表现得像一个原子组,你只需要一个捕获和一个反向引用)
我正在尝试匹配字符串 Article
后跟一个数字(一个或多个数字)的所有出现,这些数字是 而不是 后跟一个左括号。在 Sublime Text 中,我使用以下正则表达式:
Article\s[0-9]++(?!\()
搜索以下字符串:
Article 29
Article 30(1)
与 Article 30(1)
不匹配(如我所料),但 Article 29
和 Article 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])
^^^
或者,使用单词边界:
Article\s[0-9]+\b(?!\()
^
参见 this regex demo。
您还可以使用 (?=(...))
解决方法围绕您要匹配的内容模拟原子组 (?>...)
:
(?=(Article\s[0-9]+))(?!\()
(先行自然地表现得像一个原子组,你只需要一个捕获和一个反向引用)