2010-01-05 25 views
1

我一直對着鍵盤敲打我的頭,尋找啓發,通過谷歌和所有Python文檔,我可以得到我的手,但無法找到我遇到的問題的答案。如何強制Python忽略re.findall()語句中的re.DOTALL?

我有以下的正則表達式,我對運行一個網站,但是Python堅持在其上設置re.DOTALL,即使我的代碼並沒有告訴它:

\d+. +(?P<season>\d+) *\- *(?P<episode>\d+).*?(?P<day>\d+)(?:\/|\s)+(?P<month>[A-Za-z]+)(?:\/|\s)+(?P<year>\d+) +(?:<a .+><img .+></a>)? ?<a .*?>(?P<name>.*?)</a> 

這將創建賽季的數組/電視節目列表的節目,並且它工作正常,除了epguides.com/BurnNotice(當使用TVRage列表時),由於換行符之前的一些間距(我猜)。

使用http://re-try.appspot.com進行測試,我已將問題縮小到使用re.DOTALL。如果我在重試時啓用它,它會複製我在腳本上獨立運行時得到的結果。如果我解開DOTALL,那麼它給了我期望的結果。

如何強制Python不使用re.DOTALL?

腳本同時運行在Ubuntu和OS X.

+2

你能給我們一個你正在使用的數據的樣本和預期的輸出嗎? – 2010-01-05 00:59:44

+0

用HTML解析器解析HTML會更好。地獄,那個URL上的文檔甚至是格式良好的XHTML,你甚至可以用簡單的老式小型文件解析它,而不必尋找BeautifulSoup。 – bobince 2010-01-05 02:35:58

+0

@James Polley:示例數據是來自http://epguides.com/BurnNotice/頁面的源HTML代碼。預期輸出應該是可以解析的東西: 適用於季節,劇集,日,月,年,劇集名稱: show.episodes [(int(season),int(episode))] = { 「title」:name} – 2010-01-06 19:15:05

回答

2

.+>應更改爲[^>]+>

.*?>[^>]*>

你可以嘗試更換其他點結合到[^\r\n]過,但高於2度的變化應足夠。

+0

製作上述2個更改無效,但用取代。 謝謝! 因此,在這種情況下使用^就像一個負面因素? – 2010-01-06 19:27:47

+0

是的,它是否定的,意思是除\ r \ n之外的任何東西 – YOU 2010-01-07 01:04:10