前缀为r的字符串的拆分行为

Dar*_*dit 3 python string string-split

你能帮我理解一下这个行为吗:

>>> a = "abc\\def\\ghi"
>>> a.split(r"\\")
['abc\\def\\ghi']
Run Code Online (Sandbox Code Playgroud)

然而,在花了几分钟和排列后,我发现这个目前正在起作用:

>>> a.split("\\")
['abc', 'def', 'ghi']
Run Code Online (Sandbox Code Playgroud)

你能指出我导致这种行为的文献/设计考虑因素吗?

tim*_*geb 5

您的字符串包含已转义的常规单个反斜杠:

>>> a = "abc\\def\\ghi"
>>> a
'abc\\def\\ghi'
>>> print(a)
abc\def\ghi
Run Code Online (Sandbox Code Playgroud)

当您拆分时,"\\"您正在转义一个反斜杠,因此您将拆分一个反斜杠并获得三个元素的列表:['abc', 'def', 'ghi'].当你拆分时,r"\\"你会被两个反斜杠拆分,因为前缀一个字符串r是Python的原始字符串表示法(与正则表达式无关).这里重要的是在原始字符串文字中不以任何特殊方式处理反斜杠.

在查看r人的正则表达式时,经常看到前缀字符串的原因是它们不想转义反斜杠字符,这些字符在正则表达式中也有特殊含义.

关于正则表达式的一些进一步阅读:反斜杠瘟疫