更新1:Python 3.3.3 re.compile('e')和re.compile(' e')發生了什麼?
>>> '\e'
'\\e'
以上情況說明,Python的文本分析器對待'\e'
兩個文字\
和e
。我對嗎?如果是這樣, re.compile('\e')
也應遵循此規則第一。即它應該匹配兩個文字\
和e
。像這樣:
>>> re.findall('\e','\e\e')
['\e', '\e']
如果我錯了,爲什麼?
原題:
爲了方便我用RER指示蟒蛇標準庫re模塊的機制。
我已經閱讀了python doc中的相關文章。我知道警告「強烈建議您爲所有人使用原始字符串,但最簡單的表達方式」。但我只想知道如果我不使用原始字符串,re.compile將如何工作。只需看一看:
>>> A=re.compile('\e')
>>> B=re.compile('e')
>>> A==B
False
>>> re.findall(A,'eee')
['e', 'e', 'e']
>>> re.findall(B,'eee')
['e', 'e', 'e']
正如您所看到的,A和B在執行搜索時沒有什麼不同。然後:
爲什麼'\ e'可以匹配字符串字面值'e'?
你能找到一個會產生差異的字符串文字嗎?
的另一個問題是,爲什麼re.compile('\\')
會引發錯誤。請注意,這是一個關於re機制的問題,而不是如何編寫re源代碼。因爲我覺得:
顯然\\
意味着一個反斜槓,RER爲什麼不知道?爲什麼我們需要一個模式\\\\
來匹配文字反斜槓?看看這個:
>>> re.findall('\n','\n')
['\n']
完美的作品。但是,如果將n
更改爲\
,則會引發錯誤。這對我來說很難理解。
會發生什麼,如果快線RER允許\\
匹配一個反斜槓?它是不是像重新存在的基礎?如果是這樣,你能舉個例子嗎?
在此先感謝。它讓我困惑很久。
我知道規則'當你在你的代碼中說'\'時,你實際上在正則表達式中說'\'。我不知道爲什麼我們不能說'當你在代碼中說'\'時,你也會在正則表達式中說\'。 – tcpiper
@Pythoner'\\'實際上是在python代碼中轉義'\'。所以,我們實際上是將'\'傳遞給正則表達式。 – thefourtheye