2013-07-05 118 views
3

如果我有一個包含這樣的字符串:Python的正則表達式:刪除某些HTML標籤和內容在他們

<p><span class=love><p>miracle</p>...</span></p><br>love</br> 

而且我想刪除該字符串:

<span class=love><p>miracle</p>...</span> 

,也許一些其他HTML標籤。同時,其他標籤和其中的內容將被保留。

結果應該是這樣的:

<p></p><br>love</br> 

我想知道如何做到這一點使用正則表達式模式? 我曾嘗試:

r=re.compile(r'<span class=love>.*?(?=</span>)') 
r.sub('',s) 

,但它會離開

</span> 

可以幫助使用我re模塊這段時間,我會學習下一

+0

'也許其他一些HTML標籤......「 - 如果您要刪除很多不同的東西,您應該考慮解析HTML而不是使用正則表達式。 – Nadh

+0

有沒有辦法你可以在正則表達式... usean html parser – Anirudha

+2

@Anirudh - 不正確,因爲戳的答案表明,正則表達式可以選擇兩個字符串和任何之間的任何 –

回答

7

第一件事HTML解析器第一? Don’t parse HTML using regular expressions

這就是說,如果在span標籤內沒有額外的span標籤,那麼你可以這樣做:

text = re.sub('<span class=love>.*?</span>', '', text) 

在旁註:段落標籤不應該在span標籤內(只有phrasing content是)。


您嘗試過的表達式<span class=love>.*?(?=</span>)已經相當不錯了。問題在於前瞻(?=</span>)將永遠不符合它的前景。因此,表達式將在之前立即停止關閉範圍標記。您現在可以在最後手動添加結束範圍,即<span class=love>.*?(?=</span>)</span>,但這並非必要:.*?是一個非貪婪的表達式。它會嘗試儘可能少地匹配。所以在.*?</span>.*?將只匹配,直到發現立即停止的結束跨度。

+0

你的回答對我有幫助!它比我的好!這是第一次發佈的問題是StackOverFlow,我已經及時關注並解決了!謝謝! – mjc

+0

@poke他不想分析HTML文檔,他只想替換它的某些部分。 – eyquem

+1

@eyquem我完全意識到這一點。這只是一個免責聲明,我知道這個話題,我添加到這些答案,以防止人們爭論HTML和正則表達式主題...:/ – poke

相關問題