2014-01-18 43 views
0

我有如下简单的表达式。基本上我想匹配字符串[\但似乎我做错了什么。请让我知道如何做对。Python re:为什么它不匹配?

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) 

感谢

+3

你应该几乎总是使用正则表达式的原始字符串。 – Barmar

回答

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() 
[\ 

请记住,你必须逃离结束串反斜杠,即使在原始字符串。