我曾经遇到过一些东西,想知道它是否是一个 Python“bug”,或者至少是一个错误功能。我很好奇是否有人知道这种行为的任何理由。我刚刚在阅读《Code Like a Pythonista》时想到了这一点,到目前为止,这本书很有趣。我只熟悉Python的2.x系列。
原始字符串是带有前缀的字符串r
。这很棒,因为我可以在正则表达式中使用反斜杠,并且不需要在任何地方都将所有内容加倍。在 Windows 上编写一次性脚本也很方便,因此我也可以在那里使用反斜杠。 (我知道我也可以使用正斜杠,但一次性脚本通常包含从 Windows 中其他位置剪切和粘贴的内容。)
很好!当然,除非您确实希望字符串以反斜杠结尾。在“原始”字符串中无法做到这一点。
In [9]: r'\n'
Out[9]: '\\n'
In [10]: r'abc\n'
Out[10]: 'abc\\n'
In [11]: r'abc\'
------------------------------------------------
File "<ipython console>", line 1
r'abc\'
^
SyntaxError: EOL while scanning string literal
In [12]: r'abc\\'
Out[12]: 'abc\\\\'
因此,结束引号前的一个反斜杠是错误的,但两个反斜杠则为两个反斜杠!当然,我不是唯一一个为此烦恼的人?
关于为什么“原始”字符串是“原始,除了反斜杠引号”的想法?我的意思是,如果我想在其中嵌入单引号,我只需在字符串周围使用双引号,反之亦然。如果我两者都想要,我只需三重引用。如果我真的想要在原始字符串中连续使用三个引号,那么我想我必须处理,但这被认为是“正确的行为”吗?
对于 Windows 中的文件夹名称来说,这尤其成问题,其中反斜杠是路径分隔符。
It's a FAQ http://docs.python.org/faq/design.html#why-can-t-raw-strings-r-strings-end-with-a-backslash.
针对“您确实希望字符串以反斜杠结尾。在‘原始’字符串中无法做到这一点。”:常见问题解答显示了如何解决该问题。
>>> r'ab\c' '\\' == 'ab\\c\\'
True
>>>
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)