我有如下的简单表达式。基本上我想匹配字符串[\
但似乎我做错了。请让我知道如何做对。
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)
由于
答案 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()
[\
请记住,即使在原始字符串中也必须转义字符串结尾反斜杠。