我有以下正则表达式:
[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+匹配,这是我所期望的。
我在这里错过了什么?
发布于 2010-09-17 17:23:18
不要使用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()
)?在这种情况下,正则表达式当然不能工作。
https://stackoverflow.com/questions/3734023
复制相似问题