2013-11-26 44 views
0

我無法弄清楚正則表達式如何解釋模式\\\\mac\\\\。它出現在python中,\\mac\\正則表達式如何在python中解釋模式'\\ mac \''

不過,我徘徊,爲什麼不蟒蛇重模塊不斷解釋模式\mac\,因爲它之前和在\\mac\\mac背後有雙反斜線。

這是否意味着重做一次逃生並且不會逃脫已逃脫的字符串。有人可以幫助我嗎?

+1

你想匹配'** \\\\ mac \\\\ **'或者它是正則表達式本身嗎? –

+0

\是一個元字符,所以如果你想匹配你的模式將不得不添加\以逃脫\,所以你最終將與\\。 – chuthan20

+0

>>> re.match(r'\ * \ * \\\\ mac \\\\\\\\\\\'',r'** \\ mac \\\'') <_sre.SRE_Match at 0x10a1718 >「努力提高你的寫作水平,很難說清你需要什麼。 –

回答

2

使用正則表達式字符串(與r前綴)用於表示這種怪物:

r'\\\\mac\\\\' 

然後所有角色留下給他們的方式。

>>> print r'\\\\mac\\\\' 
\\\\mac\\\\ 

如果你想獲得一個正則表達式匹配這樣的怪物,你將需要避免在每個特殊字符:

>>> import re 
>>> re.match(, r'\\\\mac\\\\') 
<_sre.SRE_Match object at 0x7febff89d850> 

引號和轉義經常碰到硬如果超過,瞭解情況一個解釋步驟發生。在這種情況下,正則表達式函數match將解釋給出的字符串(\\\\\\\\mac\\\\\\\\)。由於反斜槓作爲正則表達式語言中的轉義字符具有特殊含義,因此必須轉義反斜槓(再次使用反斜槓)。所以每個反斜槓都加倍了。這就是爲什麼你需要八個字面反斜槓來表示四個逐字反斜槓。如果您不使用r表示法作爲字符串文字的前綴,那麼您必須將每個反斜槓加倍,因爲字符串解析器已經在字符串文本中解釋了反斜槓,而沒有使用r前綴,即i。 e .:

r'\\\\\\\\mac\\\\\\\\' == '\\\\\\\\\\\\\\\\mac\\\\\\\\\\\\\\\\' 

這就是爲什麼我稱之爲「怪物」。

+0

抱歉我的可怕表達誤導你。我已編輯它,所以你可以再看一遍並解釋它。 – andy

+0

我編輯了我的答案以反映新情況。 – Alfe

+0

我不知道你的第三個例子爲什麼起作用。 – andy