【问题标题】:understanding raw string for regular expressions in python理解python中正则表达式的原始字符串
【发布时间】:2015-12-18 16:05:42
【问题描述】:

我有很多包含换行符的文本文件,我在 python 3.4 中解析它们。我正在寻找换行符,因为它们将我的文本分成不同的部分。这是一个文本示例:

text = 'avocat  ;\n\n       m. x'

我天真地开始在我的正则表达式 (RE) 中寻找带有“\n”的换行符,而没有想到反斜杠“\”是一个转义字符。然而,事实证明这工作正常:

>>> import re

>>> pattern1 = '\n\n'
>>> re.findall(pattern1, text)
['\n\n']

然后,我知道我应该使用双反斜杠来查找一个反斜杠。这也很好用:

>>> pattern2 = '\\n\\n'
>>> re.findall(pattern2, text)
['\n\n']

但是在another thread 上,我被告知使用原始字符串而不是常规字符串,但是这种格式无法找到我正在寻找的换行符:

>>> pattern3 = r'\\n\\n'
>>> pattern3
'\\\\n\\\\n'
>>> re.findall(pattern3, text)
[]

你能帮帮我吗?为了正确匹配换行符,我应该使用什么 RE 之王有点困惑。

【问题讨论】:

    标签: python regex newline rawstring


    【解决方案1】:

    使用原始字符串时不要加倍反斜杠:

    >>> pattern3 = r'\n\n'
    >>> pattern3
    '\\n\\n'
    >>> re.findall(pattern3, text)
    ['\n\n']
    

    【讨论】:

      【解决方案2】:

      好的,我明白了。在这个漂亮的Python regex cheat sheet 中,它说: "特殊字符转义很像 Python 字符串文字中已经转义的字符。因此正则表达式 '\n' 与正则表达式 '\\n' 相同。

      这就是为什么pattern1pattern2 在我之前的示例中匹配我的文本。然而,pattern3 在已经解释的文本中寻找“\\n”,在规范字符串表示中实际上是“\\\\n”。

      【讨论】:

        猜你喜欢
        • 2015-07-21
        • 2021-10-02
        • 1970-01-01
        • 1970-01-01
        • 2016-01-10
        • 1970-01-01
        • 2019-10-24
        相关资源
        最近更新 更多