[英]The backslash character in Regex for Python
在Regex 的 Python 文檔中,作者提到:
正則表達式使用反斜杠字符 ('\') 來指示特殊的 forms 或允許使用特殊字符而不調用其特殊含義。 這與 Python 在字符串文字中出於相同目的使用相同字符相沖突。
然后他繼續給出一個在正則表達式中匹配\section
的例子:
要匹配文字反斜杠,必須將“\\”寫為 RE 字符串,因為正則表達式必須是 \,並且每個反斜杠必須在常規 Python 字符串文字內表示為 \。 在具有重復反斜杠的 RE 中,這會導致大量重復的反斜杠並使生成的字符串難以理解。
然后他說解決這個“反斜杠瘟疫”的方法是用r
開始一個字符串,把它變成一個原始字符串。
不過后來,他給出了這個使用正則表達式的例子:
p = re.compile('\d+')
p.findall('12 drummers drumming, 11 pipers piping, 10 lords a-leaping')
這導致:
['12', '11', '10']
我很困惑為什么在這種情況下我們不需要在'\d+'
之前包含一個r
。 我想,根據前面對反斜杠的解釋,我們需要告訴 Python 這個字符串中的反斜杠不是它知道的反斜杠。
Python 僅將某些以\
開頭的序列識別為轉義序列。 例如\d
不是已知的轉義序列,因此對於這種特殊情況,無需轉義反斜杠以將其保留在那里。
(在 Python 3.6 中) "\d"
和"\\d"
是等價的:
>>> "\d" == "\\d"
True
>>> r"\d" == "\\d"
True
以下是所有已識別轉義序列的列表: https://docs.python.org/3/reference/lexical_analysis.html#string-and-bytes-literals
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.