Python - 原始字符串文字

ori*_*ori 6 python rawstring

我不明白原始字符串文字是如何工作的.我知道在使用r它时会忽略所有特殊内容,比如在执行\n此操作时将其视为\n而不是新行.但后来我试着这样做:

x = r'\'
Run Code Online (Sandbox Code Playgroud)

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

为什么?我没弄错吗?以及对此的解释是什么:

print r'\\' # gives '\\'
print r'\\\' # gives SyntaxError
Run Code Online (Sandbox Code Playgroud)

Alf*_*ssi 6

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

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

来自文档


Sha*_*ank 6

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

要获得具有奇数个文字反斜杠的任意字符串,我认为最好的方法是使用常规字符串文字.这是因为尝试使用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
Run Code Online (Sandbox Code Playgroud)

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