理解 python 中正则表达式的原始字符串

understanding raw string for regular expressions in python

我在 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']

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

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

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

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

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

好的,我知道了。在这个漂亮的 Python regex cheat sheet 中它说: “特殊字符转义与 Python 字符串文字中已经转义的字符非常相似。因此正则表达式 '\n' 与正则表达式相同 '\n'".

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