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