2013-10-05 55 views
1

Python有這種指定正則表達式模式的方法,其中所有特殊字符都不應被視爲特殊字符。從文檔:正則表達式中的原始字符串表示法

因此r「\ n」是包含'\'和'n'的雙字符字符串,而「\ n」是包含換行符的單字符字符串。

爲什麼然後它能正常工作?

import re 
print re.split(r"\n", "1\n2\n3") 

第一個參數應該是「\」和「n」,第二個參數應該包含兩個換行符。但它打印:

['1', '2', '3'] 

回答

2

第一個確實包含反斜線和-N,但在正則表達式語言,反斜槓和n表示換行符(就像它在Python字符串語法)。也就是說,字符串r"\n"不包含實際的換行符,但它包含告訴正則表達式引擎查找實際換行符的內容。

如果要搜索反斜槓後跟n,則需要使用r"\\n"

原始字符串的要點是它們阻止了Python對字符串轉義的基本解釋,允許您使用反斜槓作爲其正則表達式的含義。如果你不想要正則表達式的含義,你仍然需要使用兩個反斜槓,就像我上面的例子。但是如果沒有原始字符串,情況會更糟:如果您想在沒有原始字符串的情況下搜索文字反斜槓-n,則必須使用"\\\\n"。如果原始字符串阻止了對正則表達式特殊字符的解釋(因此簡單的"\n"確實意味着反斜槓-n),那麼根本就沒有任何使用正則表達式語法的方法。

+0

嗯...我如何搜索「\」後跟「n」? –

+0

@EcirHana:看到我編輯的答案。 – BrenBarn

+0

@BrenBarn自從你回答這個問題已經有一段時間了,但我希望有人能幫忙。我嘗試匹配一個反斜槓,後跟n('text ='\\ n''),我做了're.match(r'\\ n',text)'。結果是'<_sre.SRE_Match對象; span =(0,2),match ='\\ n'>'。爲什麼我會用\\ n來代替\ n? – Le0

相關問題