2015-01-04 149 views
-5

re.search(r'c\.t', 'c.t abc')成功匹配c.t。但是匹配的模式是c\.tc.t如何匹配到c\.t?反斜槓發生了什麼?re.search如何匹配原始字符串?

+1

什麼反斜槓? –

+0

被匹配的模式包含反斜槓?因爲它是一個原始字符串。 – Ankit

+0

@Ankit這裏沒有反斜槓.. – Maroun

回答

1

在正則表達式中,點符號具有特殊含義,即它可以匹配除換行符以外的任何字符(除非使用re.S/re.DOTALL標誌)。在這種情況下,反斜槓的作用是將點從其特殊含義中轉義出來,並讓正則表達式引擎將其解釋爲僅僅匹配一個點(而不是其他字符)。考慮反斜槓是否不存在:

>>> re.search(r'c.t', 'c.t abc') 
<_sre.SRE_Match object at 0x7fe7378d8370> 

您作爲輸入提供的原始字符串仍然匹配。但現在下面也將匹配:

>>> re.search(r'c.t', 'I saw a cat') 
<_sre.SRE_Match object at 0x7fe7378d83d8> 

由於cata資格作爲任何非換行符,這是什麼,如果轉義一個反斜槓.將匹配。你可以看到,如果我們添加反斜槓,它不再匹配。

>>> print(re.search(r'c\.t', 'I saw a cat')) 
None 

更多關於Python實現正則表達式的位置:

的Python 2.7.x:https://docs.python.org/2/library/re.html

的Python 3.4.x:https://docs.python.org/3/library/re.html

編輯,以反映@ cdarke的約換行符

優秀點
+1

默認情況下。不匹配換行符,除非使用S標誌(DOTALL)。 – cdarke

+0

@cdarke感謝您的優秀捕獲,答案已更新,以反映這一點。 – rchang