2011-05-18 76 views
0

我有一个文件,我需要解析。解析是逐步构建的,因此在每次迭代中,表达式都变得更具特定性。re.compile(模式,文件)调用导致系统崩溃

其超载系统中的代码段看起来大致是这样的:

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文件(从Bing地图解析),以及每个答案必须其确切的ID相符。

在应用此更改之前,工作流程非常好。有什么我可以做,以避免这种情况?或者优化代码?

+5

哈!这就是使用正则表达式解析HTML所得到的结果。 http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454 – 2011-05-18 21:20:44

+1

首先,不要使用正则表达式来解析HTML!其次,什么样的崩溃? Segfault或Python异常?任何有用的信息? – Santa 2011-05-18 21:25:41

+0

Python环境只是停止响应,尽管键盘中断“唤醒它”@santa – 242Eld 2011-05-19 08:16:09

回答

0

我唯一的猜测是你得到太多的比赛和内存不足。虽然这看起来不太合理,但情况可能如此。尝试使用finditer而不是findall来一次获得一个匹配,而不会创建一个匹配的怪物列表。如果这不能解决你的问题,你可能会偶然发现re模块中更严重的错误。

+0

内存不足会导致他MemoryError(或类似的东西,我不记得错误名称)。 – Santa 2011-05-19 17:24:57

+0

我认为这是问题所在,我不得不将许多匹配/编译的项目添加到内存不足的地步。谢天谢地,现在它已经解决了! – 242Eld 2011-05-20 10:07:49