我有以下正则表达式:
[0-9]{8}.*\n.*\n.*\n.*\n.*
我在Expresso中测试了我正在使用的文件并且匹配成功。
我想匹配以下内容:
我的python代码是:
for m in re.findall('[0-9]{8}.*\n.*\n.*\n.*\n.*', l, re.DOTALL):
print m
但没有比赛产生,正如Expresso所说,有400多场比赛,这是我所期望的。
我在这里缺少什么?
答案 0 :(得分:12)
不要使用re.DOTALL
,否则点也会与换行符匹配。也可以使用原始字符串(r"..."
)来表示正则表达式:
for m in re.findall(r'[0-9]{8}.*\n.*\n.*\n.*\n.*', l):
print m
但是,您的版本仍然应该有效(尽管非常低效)如果您已将整个文件作为二进制文件读取到内存中作为一个大字符串。
所以问题是,你是否正在阅读这样的文件:
with open("filename","rb") as myfile:
mydata = myfile.read()
for m in re.findall(r'[0-9]{8}.*\n.*\n.*\n.*\n.*', mydata):
print m
或者您使用的是单行(for line in myfile:
还是myfile.readlines()
)?在这种情况下,正则表达式当然不能正常工作。