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

时间:2015-09-21 20:26:39

标签: python regex newline rawstring

我有很多文本文件都是新行,我在python 3.4中解析。我正在寻找换行符,因为它们将我的文本分成不同的部分。以下是文字示例:

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

我天真地开始在我的正则表达式(RE)中查找带有“\n”的换行符,而不考虑反斜杠“\”是转义字符。 Howerver,事实证明这很好:

>>> 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的国王应该使用什么感到有些困惑。

2 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:1)

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

这就是pattern1pattern2与我之前示例中的文字相匹配的原因。但是,pattern3在已经解释的文本中寻找“\\n”,在规范字符串表示中实际上是“\\\\n”。