2014-01-18 99 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() 
[\ 

請記住,你必須逃離結束串反斜槓,即使在原始字符串。