我有很多文本文件都是新行,我在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的国王应该使用什么感到有些困惑。
答案 0 :(得分:4)
使用原始字符串时不要加倍反斜杠:
>>> pattern3 = r'\n\n'
>>> pattern3
'\\n\\n'
>>> re.findall(pattern3, text)
['\n\n']
答案 1 :(得分:1)
好的,我明白了。在这个不错的Python regex cheat sheet中它说:
“特殊字符转义很像已经在Python字符串文字中转义的那些。因此正则表达式'\n
'与正则表达式相同'\\n
'”
这就是pattern1
和pattern2
与我之前示例中的文字相匹配的原因。但是,pattern3
在已经解释的文本中寻找“\\n
”,在规范字符串表示中实际上是“\\\\n
”。