从技术上讲,任何奇数个反斜杠,如文档中所述。
>>> r'\'
File "<stdin>", line 1
r'\'
^
SyntaxError: EOL while scanning string literal
>>> r'\\'
'\\\\'
>>> r'\\\'
File "<stdin>", line 1
r'\\\'
^
SyntaxError: EOL while scanning string literal
解析器似乎只能将原始字符串中的反斜杠视为常规字符(原始字符串不就是这样吗?),但我可能忽略了一些明显的东西。
原因在这一节中用粗体标出的部分解释了:
String quotes can be escaped with a
backslash, but the backslash remains
in the string; for example, r"\"" is a
valid string literal consisting of two
characters: a backslash and a double
quote; r"\" is not a valid string
literal (even a raw string cannot end
in an odd number of backslashes).
Specifically, a raw string cannot end
in a single backslash (since the
backslash would escape the following
quote character). Note also that a
single backslash followed by a newline
is interpreted as those two characters
as part of the string, not as a line
continuation.
原始字符串不是100%原始的,仍然有一些基本的反斜杠处理。
事情就是这样!我认为这是python中的一个小缺陷!
我不认为这有什么好的理由,但这绝对不是解析;用\作为最后一个字符解析原始字符串非常容易。
问题是,如果您允许\是原始字符串中的最后一个字符,那么您将无法在原始字符串中放入"。python似乎使用了允许“而不是允许\作为最后一个字符。
不过,这应该不会造成任何麻烦。
如果你担心不能轻松地编写windows文件夹路径,例如c:\mypath\,那么不用担心,因为,你可以将它们表示为r" c:\mypath ",并且,如果你需要附加子目录名称,不要用字符串连接,因为这不是正确的方式来做它!使用os.path.join
>>> import os
>>> os.path.join(r"C:\mypath", "subfolder")
'C:\\mypath\\subfolder'
我遇到过这个问题,并找到了一个部分解决方案,这在某些情况下是很好的。尽管python不能以一个反斜杠结束一个字符串,但它可以序列化并保存在一个文本文件中,结尾是一个反斜杠。因此,如果你需要在你的电脑上保存一个带有反斜杠的文本,这是可能的:
x = 'a string\\'
x
'a string\\'
# Now save it in a text file and it will appear with a single backslash:
with open("my_file.txt", 'w') as h:
h.write(x)
顺便说一句,如果你使用python的json库转储它,它就不能与json一起工作。
最后,我使用Spyder,我注意到,如果我在蜘蛛的文本编辑器中双击变量资源管理器中的名称来打开变量,它会显示一个反斜杠,并且可以以这种方式复制到剪贴板(这对大多数需求不是很有帮助,但可能对一些..)。