Python有這種指定正則表達式模式的方法,其中所有特殊字符都不應被視爲特殊字符。從文檔:正則表達式中的原始字符串表示法
因此r「\ n」是包含'\'和'n'的雙字符字符串,而「\ n」是包含換行符的單字符字符串。
爲什麼然後它能正常工作?
import re
print re.split(r"\n", "1\n2\n3")
第一個參數應該是「\」和「n」,第二個參數應該包含兩個換行符。但它打印:
['1', '2', '3']
Python有這種指定正則表達式模式的方法,其中所有特殊字符都不應被視爲特殊字符。從文檔:正則表達式中的原始字符串表示法
因此r「\ n」是包含'\'和'n'的雙字符字符串,而「\ n」是包含換行符的單字符字符串。
爲什麼然後它能正常工作?
import re
print re.split(r"\n", "1\n2\n3")
第一個參數應該是「\」和「n」,第二個參數應該包含兩個換行符。但它打印:
['1', '2', '3']
第一個確實包含反斜線和-N,但在正則表達式語言,反斜槓和n表示換行符(就像它在Python字符串語法)。也就是說,字符串r"\n"
不包含實際的換行符,但它包含告訴正則表達式引擎查找實際換行符的內容。
如果要搜索反斜槓後跟n,則需要使用r"\\n"
。
原始字符串的要點是它們阻止了Python對字符串轉義的基本解釋,允許您使用反斜槓作爲其正則表達式的含義。如果你不想要正則表達式的含義,你仍然需要使用兩個反斜槓,就像我上面的例子。但是如果沒有原始字符串,情況會更糟:如果您想在沒有原始字符串的情況下搜索文字反斜槓-n,則必須使用"\\\\n"
。如果原始字符串阻止了對正則表達式特殊字符的解釋(因此簡單的"\n"
確實意味着反斜槓-n),那麼根本就沒有任何使用正則表達式語法的方法。
嗯...我如何搜索「\」後跟「n」? –
@EcirHana:看到我編輯的答案。 – BrenBarn
@BrenBarn自從你回答這個問題已經有一段時間了,但我希望有人能幫忙。我嘗試匹配一個反斜槓,後跟n('text ='\\ n''),我做了're.match(r'\\ n',text)'。結果是'<_sre.SRE_Match對象; span =(0,2),match ='\\ n'>'。爲什麼我會用\\ n來代替\ n? – Le0