我希望匹配一些前面带有非数字或字符串开头的数字。
由于插入符号在括号内没有特殊含义,因此我无法使用该插入符号,因此我检查了the reference并发现了替换形式\A
。
然而,当我尝试使用它时,我收到一个错误:
>>> s = '123'
>>> re.findall('[\D\A]\d+', s)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 177, in findall
return _compile(pattern, flags).findall(string)
File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/re.py", line 245, in _compile
raise error, v # invalid expression
sre_constants.error: internal: unsupported set operator
我做错了什么?
答案 0 :(得分:2)
你可以使用负面的后视:
(?<!\d)\d+
您的问题是您在字符类中使用\A
(零宽度断言),用于匹配单个字符。你可以像(?:\D|\A)
那样写它,但是看起来更好。
答案 1 :(得分:0)
默认情况下,正则表达式中的重复是贪婪的,因此将re.findall()
与正则表达式\d+
一起使用可以获得您想要的内容:
re.findall(r'\d+', s)
作为旁注,在编写正则表达式时应该使用原始字符串,以确保正确解释反斜杠。