将python中文件的开头和结尾与正则表达式匹配

将python中文件的开头和结尾与正则表达式匹配,python,regex,Python,Regex,我很难在python中找到文件开头和结尾的正则表达式。 我该如何做到这一点?也许你应该更清楚地提出你的问题,比如你想做什么。这就是说,您可以将文件拼成一个完整的字符串,并使用re匹配您的模式 import re data=open("file").read() pat=re.compile("^.*pattern.*$",re.M|re.DOTALL) print pat.findall(data) 有更好的方法来做你想做的事,不管是什么,都不需要重新考虑。regex$是不是你的朋友;请参见将

我很难在python中找到文件开头和结尾的正则表达式。
我该如何做到这一点?

也许你应该更清楚地提出你的问题,比如你想做什么。这就是说,您可以将文件拼成一个完整的字符串,并使用re匹配您的模式

import re
data=open("file").read()
pat=re.compile("^.*pattern.*$",re.M|re.DOTALL)
print pat.findall(data)

有更好的方法来做你想做的事,不管是什么,都不需要重新考虑。

regex
$
不是你的朋友;请参见

将整个文件读入字符串,然后\a只匹配字符串的开头,\Z只匹配字符串的结尾。对于re.MULTILINE,“^”匹配字符串的开头和新行之后的开头,“$”匹配字符串的结尾和新行之前的结尾。有关详细信息,请参阅Python文档

输出:

['sentence one.', 'sentence two.', 'sentence three.', 'sentence four.']
['sentence one.']
['sentence four.']

正则表达式应用于字符串,而不是文件。因为。*是贪婪的,所以在一个文件中只能找到“pattern”的一个实例。由于您指定了re.M标志,$matches正好位于文件中的每个换行符之前,因此对于贪婪。*和re.DOTALL,第一个。*将匹配文件中最后一个“模式”之前的所有内容,第二个将匹配最后一个“模式”之后的所有内容。随便。这不是一个完整的解决方案,因为我们不确定OP真正想要做什么。我能做的最好的事情就是告诉他,他可以把整个文件作为一个字符串读取,然后像普通字符串一样对其执行正则表达式。
['sentence one.', 'sentence two.', 'sentence three.', 'sentence four.']
['sentence one.']
['sentence four.']