python - 以 r 为前缀的字符串的拆分行为

标签 python string split

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

>>> 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/

相关文章:

python - 将参数传递给python中的装饰器

c - 如何将二维数组重复 segmentation 或分割成更小的象限?

r - 如何使用前导零连续制作不连续的字符数字序列?

python - 按 '],[' 拆分字符串,但保留括号

将任意数量的单词分成两列 - Google 表格

python - 单词和字母列表到字母列表

python - 如何确定正在运行的当前进程是否是父进程?

python - 如何设置从 shell 调用时 python 脚本可以使用的最大线程

java - 从 ListView 中获取字符串的单个部分

java - Java 中的通用数字到字符串转换