你能帮我理解这个行为吗:
>>> a = "abc\\def\\ghi"
>>> a.split(r"\\")
['abc\\def\\ghi']
然而,在花了几分钟和排列之后,我发现现在这是可行的:
>>> a.split("\\")
['abc', 'def', 'ghi']
你能指出导致这种行为的文献/设计考虑因素吗?
最佳答案
您的字符串包含已转义的常规单反斜杠:
>>> a = "abc\\def\\ghi"
>>> a
'abc\\def\\ghi'
>>> print(a)
abc\def\ghi
当您按 "\\"
拆分时,您将转义一个反斜杠,因此您将按一个反斜杠拆分并将获得包含三个元素的列表:['abc', 'def ', 'ghi']
。
当您按 r"\\"
拆分时,您将被 两个 反斜杠拆分,因为在字符串前加上 r
是 Python 的 原始字符串符号(与正则表达式无关)。这里重要的是反斜杠在原始字符串文字中没有以任何特殊方式处理。
当您查看人们的正则表达式时,您经常看到以 r
为前缀的字符串的原因是他们不想转义反斜杠字符,反斜杠字符在正则表达式中也有特殊含义。
一些关于正则表达式的进一步阅读:The Backslash Plague
关于python - 以 r 为前缀的字符串的拆分行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24743849/