繁体   English   中英

Python - 原始字符串文字

[英]Python - Raw String Literals

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

x = r'\'

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

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

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

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

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

来自文档

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM