我不明白原始字符串文字是如何工作的。我知道在使用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"\"
不是有效的字符串文字(即使是原始字符串也不能以奇数个反斜杠结尾)。具体来说,原始字符串不能以单个反斜杠结尾(因为反斜杠会转义后面的引号字符)。另请注意,后跟换行符的单个反斜杠被解释为这两个字符作为字符串的一部分,而不是作为续行符。
从文档