Python re:为什么不匹配?

时间:2014-01-18 08:56:36

标签: regex python-2.7

我有如下的简单表达式。基本上我想匹配字符串[\但似乎我做错了。请让我知道如何做对。

print re.match("\[\\", "\[\\")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/re.py", line 137, in match
    return _compile(pattern, flags).match(string)
  File "/usr/lib/python2.7/re.py", line 242, in _compile
    raise error, v # invalid expression
sre_constants.error: bogus escape (end of line)

由于

1 个答案:

答案 0 :(得分:2)

正如Barmar评论的那样,在处理正则表达式时,应始终使用raw strings。如果你不这样做,就会发生坏事。观察:

>>> print '\[\\'
\[\
>>> print r'\[\\'
\[\\

第一个不是有效的正则表达式 - 任何正则表达式中必须跟一个\。另一方面,第二个 是一个有效的正则表达式 - 具体来说,它匹配文字字符[后跟文字\

>>> re.compile(r'\[\\', re.DEBUG)
literal 91 # '['
literal 92 # '\'

你还有另一个问题。 re.match的第二个参数(您要匹配的字符串)不是您认为的那样。请记住,在普通字符串中,'\['不是转义码或任何东西 - 它实际上是左括号转发的反斜杠。因此,正则表达式r'\[\\'将不匹配它,因为它不会在字符串的开头找到左括号。您应该使用re.search

>>> print re.search(r'\[\\', r'\[\\').group()
[\

或者可能是你真正想要的是这个:

>>> print re.match(r'\[\\', r'[\\').group()
[\

请记住,即使在原始字符串中也必须转义字符串结尾反斜杠。