理解 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
'".
这就是为什么 pattern1
和 pattern2
匹配我之前示例中的文本的原因。但是,pattern3
正在已解释的文本中查找“\n
”,而在规范字符串表示中实际上是“\\n
”。
我在 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
'".
这就是为什么 pattern1
和 pattern2
匹配我之前示例中的文本的原因。但是,pattern3
正在已解释的文本中查找“\n
”,而在规范字符串表示中实际上是“\\n
”。