2

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

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

\n我天真地开始在我的正则表达式 (RE) 中寻找带有 ' ' 的换行符,而没有想到反斜杠 ' \' 是一个转义字符。但是,结果证明效果很好:

>>> 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 之王有点困惑。

4

2 回答 2

5

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

>>> pattern3 = r'\n\n'
>>> pattern3
'\\n\\n'
>>> re.findall(pattern3, text)
['\n\n']
于 2015-09-21T20:28:21.047 回答
2

好,我知道了。在这个漂亮的Python 正则表达式备忘单中,它说:“特殊字符转义很像那些已经在 Python 字符串文字中转义的字符。因此正则表达式' \n'与正则表达式' '相同\\n”。

这就是为什么pattern1并且pattern2在我之前的示例中匹配我的文本。但是,在已经解释的文本pattern3中寻找 ' \\n',实际上是\\\\n规范字符串表示中的 ' '。

于 2015-09-22T21:19:46.660 回答