re.compile(pattern, file) 调用导致系统崩溃

0 投票
1 回答
620 浏览
提问于 2025-04-16 17:55

我有一个文件需要解析。这个解析过程是逐步进行的,每次迭代时,表达式会变得更加具体。

导致系统负担过重的代码大致是这样的:

    for item in ret:
        pat = r'a\sstyle=".+class="VEAPI_Pushpin"\sid="msftve(.+?)".+>%s<'%item[1]
        r=re.compile(pat, re.DOTALL)
        match = r.findall(f)

这个文件是一个相当大的HTML文件(从必应地图解析而来),每个答案都必须与它的确切ID匹配。

在应用这个变化之前,工作流程非常顺畅。我可以做些什么来避免这个问题吗?或者优化一下代码呢?

1 个回答

0

我猜可能是你找的匹配项太多了,导致内存不够用。虽然这听起来不太合理,但也有可能是这样。你可以试试用finditer这个方法,它会一次找到一个匹配项,而不是一次性把所有匹配项都放到一个巨大的列表里。如果这样还是解决不了你的问题,那你可能遇到了re模块里的一个更严重的bug。

撰写回答