Python - 原始字符串字面值

8

我不理解原始字符串字面量的工作方式。我知道当使用 r 时,它会忽略所有特殊字符,比如当使用 \n 时,它会将其视为 \n 而不是一个新行。但是,我尝试做了这个:

x = r'\'

它显示了SyntaxError: EOL while scanning string literal而不是'\', 为什么?我理解得对吗?还有这个问题的解释是什么:

print r'\\' # gives '\\'
print r'\\\' # gives SyntaxError
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

这个答案仅补充其他答案。


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

字符串引号可以通过反斜杠进行转义,但是反斜杠仍然在字符串中;例如,r"\""是有效的字符串文字,由两个字符组成:一个反斜杠和一个双引号;r"\"不是有效的字符串文字(即使原始字符串不能以奇数个反斜杠结尾)。具体而言,原始字符串不能以单个反斜杠结尾(因为反斜杠会转义下一个引号字符)。还要注意,跟随换行符的单个反斜杠会被解释为字符串的一部分,而不是作为行续行。

来自于文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接