2010-11-15 280 views
1
str1 = abdk3<h1>The content we need</h1>aaaaabbb<h2>The content we need2</h2> 

我們需要h1標籤和h2標籤內的內容。Python的正則表達式

這樣做的最好方法是什麼?謝謝

感謝您的幫助!

+7

*這樣做的最佳方法是什麼?* - 獲取HTML解析器...? – kennytm 2010-11-15 07:38:30

+0

我的意思是我怎麼寫這個正則表達式? – user469652 2010-11-15 07:42:04

+0

如何可能沒有人鏈接到[this](http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags)呢? – Maus 2012-09-13 23:13:19

回答

6

如果需要縮放的話,最好的方法就是使用BeautifulSoup。

>>> from BeautifulSoup import BeautifulSoup 
>>> soup = BeautifulSoup('abdk3<h1>The content we need</h1>aaaaabbb<h2>The content we need2</h2>') 
>>> soup.h1 
<h1>The content we need</h1> 
>>> soup.h1.text 
u'The content we need' 
>>> soup.h2 
<h2>The content we need2</h2> 
>>> soup.h2.text 
u'The content we need2' 

它也可以使用正則表達式來完成,但這可能更符合您的需求。你想要的更大的例子可能是好的。不知道你想分析什麼,很難正確地幫助你。

+0

+1,如果你從h1和h2中獲取元素數據,你最終可能會在別處做它;這將很好地工作 – Scott 2010-11-15 07:48:45

+1

+1而不是單詞。 – Kobi 2010-11-15 07:49:14

+0

+1:該工作的正確工具! – Johnsyweb 2010-11-15 08:07:21

2

第一點建議:不要使用HTML/XML PARSING的正則表達式!

現在我們已經清除了那個,我建議你看看Beautiful Soup。還有其他可用於Python的SGML/XML/HTML解析器。然而,這是我們大多數人在現實世界中發現的處理馬虎「標籤湯」的最愛。它不要求輸入符合標準和格式。如果你的瀏覽器可以設法渲染它,那麼Beautiful Soup可能會設法爲你解析它。

(仍傾向於使用正則表達式完成這個任務?思考「也不能說不好,我只是想提取只是什麼在<h1>...</h1><h2>...</h2>容器。」還有......「我會從來沒有需要處理任何其他角落案例「這種方式就是瘋狂,你根據這種推理方法編寫的代碼將是脆弱的,它會適當地通過你的測試,然後它會變得越來越糟糕,每當你需要修復「只有一件事」。認真地說,導入一個真正的解析器並使用它)。