我不理解原始字符串字面量的工作方式。我知道当使用 r
时,它会忽略所有特殊字符,比如当使用 \n
时,它会将其视为 \n 而不是一个新行。但是,我尝试做了这个:
x = r'\'
它显示了SyntaxError: EOL while scanning string literal
而不是'\', 为什么?我理解得对吗?还有这个问题的解释是什么:
print r'\\' # gives '\\'
print r'\\\' # gives SyntaxError
在以单引号开头的字符串中插入单引号的唯一方法是对其进行转义。因此,当未转义的反斜杠后面跟着引号字符时,原始字符串和常规字符串字面值都将允许转义引号字符。由于有一个必须表达以单引号(或双引号)开头的字符串字面量中的单引号(或双引号)的方式要求,因此无论您使用原始字符串字面量还是常规字符串字面量,字符串字面量'\'
都不合法。
为了获得任意具有奇数个文本反斜杠的字符串,我认为最好的方法是使用常规字符串字面值。这是因为尝试使用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
这个答案仅补充其他答案。
字符串引号可以通过反斜杠进行转义,但是反斜杠仍然在字符串中;例如,
r"\""
是有效的字符串文字,由两个字符组成:一个反斜杠和一个双引号;r"\"
不是有效的字符串文字(即使原始字符串不能以奇数个反斜杠结尾)。具体而言,原始字符串不能以单个反斜杠结尾(因为反斜杠会转义下一个引号字符)。还要注意,跟随换行符的单个反斜杠会被解释为字符串的一部分,而不是作为行续行。
来自于文档