簡體   English   中英

Python - 原始字符串文字

[英]Python - Raw String Literals

我不明白原始字符串文字是如何工作的。 我知道在使用r它會忽略所有特殊內容,例如在執行\\n時將其視為\\ n而不是新行。 但后來我試着這樣做:

x = r'\'

並且它SyntaxError: EOL while scanning string literal而不是'\\'時說SyntaxError: EOL while scanning string literal

為什么? 我沒弄錯嗎? 以及對此的解釋是什么:

print r'\\' # gives '\\'
print r'\\\' # gives SyntaxError

在原始文字中,反斜杠將轉義定義字符串的引號字符。

字符串引號可以使用反斜杠進行轉義,但反斜杠仍保留在字符串中; 例如, r"\\""是一個有效的字符串文字,由兩個字符組成:反斜杠和雙引號; r"\\"不是有效的字符串文字(即使原始字符串也不能以奇數個反斜杠結尾)。具體來說,原始字符串不能以單個反斜杠結尾(因為反斜杠會轉義后面的引號字符)。另請注意,后跟換行符的單個反斜杠被解釋為字符串的一部分,而不是行繼續。

來自文檔

將單個引號放入以單引號開頭的字符串的唯一方法是逃避它。 因此,當您使用未轉義的反斜杠后跟引號字符時,原始和常規字符串文字都將允許轉義引號字符。 由於要求必須有一種方法來表示以單引號(或雙引號)開頭的字符串文字中的單引號(或雙引號),因此無論使用原始字符串還是常規字符串,字符串文字'\\'都不合法。

要獲得具有奇數個文字反斜杠的任意字符串,我認為最好的方法是使用常規字符串文字。 這是因為嘗試使用r'\\\\'會起作用,但它會給你一個帶有兩個反斜杠而不是一個反斜杠的字符串:

>>> '\\' # A single literal backslash.
'\\'
>>> len('\\')
1
>>> r'\\' # Two literal backslashes, 2 is even so this is doable with raw.
'\\\\'
>>> len(r'\\')
2
>>> '\\'*3 # Three literal backslashes, only doable with ordinary literals.
'\\\\\\'
>>> len('\\'*3)
3

這個答案只是為了補充另一個。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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