Python - 原始字符串文字

Python - Raw String Literals

我不明白原始字符串文字是如何工作的。我知道在使用 r 时它会忽略所有特殊符号,就像在使用 \n 时它会将其视为 \n 而不是新行。但后来我尝试这样做:

x = r'\'

它说 SyntaxError: EOL while scanning string literal 而不是 '\'

为什么?我理解正确吗? 以及对此的解释是什么:

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

在原始文字中,反斜杠将转义定义字符串的引号字符。

String quotes can be escaped with a backslash, but the backslash remains in the string; for example, r"\"" is a valid string literal consisting of two characters: a backslash and a double quote; r"\" is not a valid string literal (even a raw string cannot end in an odd number of backslashes). Specifically, a raw string cannot end in a single backslash (since the backslash would escape the following quote character). Note also that a single backslash followed by a newline is interpreted as those two characters as part of the string, not as a line continuation.

来自the docs

将单引号放入以单引号开头的字符串中的唯一方法是将其转义。因此,当您有未转义的反斜杠后跟引号字符时,原始字符串文字和常规字符串文字都将允许转义引号字符。由于要求必须有一种方法在以单引号(或双引号)开头的字符串文字中表达单引号(或双引号),字符串文字 '\' 是不合法的,无论您使用原始字符串还是常规字符串字符串文字。

要获得任何带有奇数个反斜杠的任意字符串,我认为最好的方法是使用常规字符串文字。这是因为尝试使用 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

这个答案只是为了补充另一个答案。