8

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

x = r'\'

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

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

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

2 回答 2

7

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

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

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

于 2015-05-10T22:28:00.420 回答
6

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

字符串引号可以用反斜杠转义,但反斜杠保留在字符串中;例如,r"\""是由两个字符组成的有效字符串文字:反斜杠和双引号;r"\"不是有效的字符串文字(即使是原始字符串也不能以奇数个反斜杠结尾)。具体来说,原始字符串不能以单个反斜杠结尾(因为反斜杠会转义后面的引号字符)。另请注意,后跟换行符的单个反斜杠被解释为这两个字符作为字符串的一部分,而不是作为续行符。

文档

于 2015-05-10T22:14:11.803 回答