从技术上讲,任何奇数个反斜杠,如文档中所述。
>>> 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
解析器似乎只能将原始字符串中的反斜杠视为常规字符(原始字符串不就是这样吗?),但我可能忽略了一些明显的东西。
关于python原始字符串的所有误解是,大多数人认为反斜杠(在原始字符串中)只是一个普通字符。事实并非如此。理解这段python教程的关键是:
当有'r'或'r'前缀时,字母a
反斜杠包含在字符串中而不更改,并且所有
反斜杠留在字符串中
所以任何跟在反斜杠后面的字符都是原始字符串的一部分。一旦解析器输入一个原始字符串(非Unicode字符串)并遇到一个反斜杠,它就知道有两个字符(一个反斜杠和后面的一个字符)。
这种方式:
R 'abc\d'由a, b, c, \, d组成
R 'abc 'd'由a, b, c, \, ', d组成
R 'abc\ "由a, b, c, \, '组成
and:
R 'abc\'由a, b, c, \组成,'但现在没有终止引号了。
最后一个案例表明,根据文档,现在一个解析器无法找到结束引号,因为你看到上面的最后一个引号是字符串的一部分,即反斜杠不能在这里最后,因为它将“吞噬”字符串结束字符。
事情就是这样!我认为这是python中的一个小缺陷!
我不认为这有什么好的理由,但这绝对不是解析;用\作为最后一个字符解析原始字符串非常容易。
问题是,如果您允许\是原始字符串中的最后一个字符,那么您将无法在原始字符串中放入"。python似乎使用了允许“而不是允许\作为最后一个字符。
不过,这应该不会造成任何麻烦。
如果你担心不能轻松地编写windows文件夹路径,例如c:\mypath\,那么不用担心,因为,你可以将它们表示为r" c:\mypath ",并且,如果你需要附加子目录名称,不要用字符串连接,因为这不是正确的方式来做它!使用os.path.join
>>> import os
>>> os.path.join(r"C:\mypath", "subfolder")
'C:\\mypath\\subfolder'