带换行符的python正则表达式不匹配

时间:2018-12-04 16:24:41

标签: python regex

我有一个包含

的文件
Line1
Line2
Line3
Line4

并且在Python程序中我正在搜索

Line1
Line2
Line3

程序是

import re

file = open("blah.log","r")
file_contents = file.read()

pattern='''Line1
Line2 
Line3'''

matchObj = re.search(pattern, file_contents, re.M|re.I)
if matchObj:
   print matchObj.group(0)
else:
   print "No match!!"

但是,即使文件中包含模式,也不会显示匹配项。

但是如果

file_contents = '''Line1
Line2
Line3
Line4''' # not reading from the file 

现在,它与正则表达式模式匹配。

这是什么原因?

如何使程序能够从文件中读取内容?

2 个答案:

答案 0 :(得分:2)

由于文件中的行由0.3分隔,因此您搜索的模式应对此予以考虑。

为了方便起见,您仍然可以使用三引号将您要搜索的字符串初始化,然后使用epsilon方法用'\r\n'替换所有出现的str.replace():< / p>

'\n'

此外,如果您需要的只是一个子字符串匹配项,则可以使用'\r\n'运算符来代替更昂贵的正则表达式匹配项:

pattern='''Line1
Line2 
Line3'''.replace('\n', '\r\n')

答案 1 :(得分:1)

文件中的换行符可以是'\ n','\ r'或'\ r \ n'。这取决于操作系统。为了安全起见,请尝试与所有换行符匹配。

pattern='''Line1(\n|\r|\r\n)Line2(\n|\r|\r\n)Line3'''