Python正则表达式:如何在选择中匹配字符串的开头?

时间:2012-03-22 16:19:12

标签: python regex

我希望匹配一些前面带有非数字或字符串开头的数字。

由于插入符号在括号内没有特殊含义,因此我无法使用该插入符号,因此我检查了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

我做错了什么?

2 个答案:

答案 0 :(得分:2)

你可以使用负面的后视:

(?<!\d)\d+

您的问题是您在字符类中使用\A(零宽度断言),用于匹配单个字符。你可以像(?:\D|\A)那样写它,但是看起来更好。

答案 1 :(得分:0)

默认情况下,正则表达式中的重复是贪婪的,因此将re.findall()与正则表达式\d+一起使用可以获得您想要的内容:

re.findall(r'\d+', s)

作为旁注,在编写正则表达式时应该使用原始字符串,以确保正确解释反斜杠。