2011-05-18 77 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