2014-04-15 45 views
2

當我想在字符串中匹配一個點作爲文字時,它適用於當轉義點後面跟着一個文字,但不是當它跟着一個re組時。正則表達式匹配組之前的一個點與re.findall

>>> re.findall(r'\.de', 'abc.de') 
['.de'] 

但隨着一組點丟失

>>> re.findall(r'\.(de|ab)', 'abc.de') 
['de'] 

我怎麼能re.findall ['.de']與一組在我的正則表達式?

回答

5

您捕獲錯誤組:-)

re.findall(r'(\.(?:de|ab))', 'abc.de') 

#or 
# re.findall(r'\.(?:de|ab)', 'abc.de') 

我忽略了使用?:

+0

你真的需要添加外支架對原來的羣體?我只問,因爲OP說'r'\。de''有效。 –

+0

如果在're.findall()'中有任何組(')'',那麼它將返回從'1,...'開始的組。但是如果沒有使用組,那麼它將返回「組0」。我習慣使用外部對,但它也可以在沒有對的情況下工作(在第二個例子中)。 –

+0

感謝您的回答!該特殊字符稱爲「非捕獲版本的常規圓括號」(https://docs.python.org/2/library/re.html)。我也想知道爲什麼你添加了一對外括號,其結果是相同的和不相同的。 –