从技术上讲,任何奇数个反斜杠,如文档中所述。
>>> r'\'
File "<stdin>", line 1
r'\'
^
SyntaxError: EOL while scanning string literal
>>> r'\\'
'\\\\'
>>> r'\\\'
File "<stdin>", line 1
r'\\\'
^
SyntaxError: EOL while scanning string literal
解析器似乎只能将原始字符串中的反斜杠视为常规字符(原始字符串不就是这样吗?),但我可能忽略了一些明显的东西。
原因在这一节中用粗体标出的部分解释了:
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.
原始字符串不是100%原始的,仍然有一些基本的反斜杠处理。
关于python原始字符串的所有误解是,大多数人认为反斜杠(在原始字符串中)只是一个普通字符。事实并非如此。理解这段python教程的关键是:
当有'r'或'r'前缀时,字母a
反斜杠包含在字符串中而不更改,并且所有
反斜杠留在字符串中
所以任何跟在反斜杠后面的字符都是原始字符串的一部分。一旦解析器输入一个原始字符串(非Unicode字符串)并遇到一个反斜杠,它就知道有两个字符(一个反斜杠和后面的一个字符)。
这种方式:
R 'abc\d'由a, b, c, \, d组成
R 'abc 'd'由a, b, c, \, ', d组成
R 'abc\ "由a, b, c, \, '组成
and:
R 'abc\'由a, b, c, \组成,'但现在没有终止引号了。
最后一个案例表明,根据文档,现在一个解析器无法找到结束引号,因为你看到上面的最后一个引号是字符串的一部分,即反斜杠不能在这里最后,因为它将“吞噬”字符串结束字符。