簡體   English   中英

Python 的正則表達式中的反斜杠字符

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM