Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python正则表达式匹配换行符_Python_Regex - Fatal编程技术网

Python正则表达式匹配换行符

Python正则表达式匹配换行符,python,regex,Python,Regex,我有以下正则表达式: [0-9]{8}.*\n.*\n.*\n.*\n.* 我已经在Expresso中对我正在使用的文件进行了测试,匹配成功 我想匹配以下内容: 参考编号8编号长 任意字符,任意次数 新线 任意字符,任意次数 新线 任意字符,任意次数 新线 任意字符,任意次数 新线 任意字符,任意次数 我的python代码是: for m in re.findall('[0-9]{8}.*\n.*\n.*\n.*\n.*', l, re.DOTALL): print m 但

我有以下正则表达式:

[0-9]{8}.*\n.*\n.*\n.*\n.*
我已经在Expresso中对我正在使用的文件进行了测试,匹配成功

我想匹配以下内容:

  • 参考编号8编号长
  • 任意字符,任意次数
  • 新线
  • 任意字符,任意次数
  • 新线
  • 任意字符,任意次数
  • 新线
  • 任意字符,任意次数
  • 新线
  • 任意字符,任意次数
我的python代码是:

for m in re.findall('[0-9]{8}.*\n.*\n.*\n.*\n.*', l, re.DOTALL):
       print m
但是没有产生匹配,正如Expresso中所说,有400多个匹配,这是我所期望的


这里我遗漏了什么?

不要使用
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

或者您正在处理单行(
对于myfile中的行:
myfile.readlines()
)?在这种情况下,正则表达式当然不能工作。

Hi,是的,我在windows上运行python,但文件来自unix环境。文件的来源不太重要。问题是您是立即打开整个文件还是使用迭代器。Python迭代器将迭代新行字符。