【问题标题】:Splitting behavior for string prefixed with r以 r 为前缀的字符串的拆分行为
【发布时间】:2014-07-14 19:02:20
【问题描述】:

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

>>> a = "abc\\def\\ghi"
>>> a.split(r"\\")
['abc\\def\\ghi']

但是,在花了几分钟和排列之后,我发现这现在可以工作了:

>>> a.split("\\")
['abc', 'def', 'ghi']

您能否指出导致这种行为的文献/设计注意事项?

【问题讨论】:

  • 这与正则表达式无关。 r 表示 raw-string,而不是 Regex 模式。
  • 稍微扩展一下:r"\\" 是两个反斜杠;反斜杠不被视为原始字符串中的转义字符。 "\\" 是一个反斜杠。
  • 除了@iCodez 所说的,您可能经常会发现用于正则表达式的原始字符串,因为反斜杠经常在正则表达式中使用,而且一直将它们加倍很痛苦。
  • 谢谢大家。 Stackoverflow 太棒了! :)

标签: python string string-split


【解决方案1】:

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

>>> a = "abc\\def\\ghi"
>>> a
'abc\\def\\ghi'
>>> print(a)
abc\def\ghi

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

当您查看人们的正则表达式时,您经常看到以r 为前缀的字符串的原因是他们不想转义在正则表达式中也具有特殊含义的反斜杠字符。

一些关于正则表达式的进一步阅读:The Backslash Plague

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-11
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    • 2021-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多