2015-09-09 81 views
2

我有類似下面的字符串,其中包含中國:如何用python替換字符串中的html元素?

'<span class=H>宜家</span><span class=H>同款</span> 世紀寶貝兒童餐椅嬰兒餐椅寶寶餐椅嬰兒吃飯椅' 

現在我想刪除該字符串的所有HTML元素如預期:

'宜家同款世紀寶貝兒童餐椅嬰兒餐椅寶寶餐椅嬰兒吃飯椅' 

我想知道如何做到這一點蟒蛇和重新?非常感謝!

回答

5

這是一些小事與BeautifulSoup HTML解析器來解決:

>>> from bs4 import BeautifulSoup 
>>> 
>>> data = '<span class=H>宜家</span><span class=H>同款</span> 世紀寶貝兒童餐椅嬰兒餐椅寶寶餐椅嬰兒吃飯椅' 
>>> soup = BeautifulSoup(data) 
>>> soup.text 
'宜家同款 世紀寶貝兒童餐椅嬰兒餐椅寶寶餐椅嬰兒吃飯椅' 
+0

它看起來很好的解決方案。我只是想使用正則表達式,我沒有得到正確的解決方案。非常感謝,我會試試這個。 –

1

對於僅使用正則表達式一個簡單的解決方案,你可以搜索以下模式,並用空字符串替換所有出現:

\s*<[^>]+>\s* 

例如:

p = re.compile('\s*<[^>]+>\s*') 
p.sub('', '<span class=H>宜家</span><span class=H>同款</span> 世紀寶貝兒童餐椅嬰兒餐椅寶寶餐椅嬰兒吃飯椅') 

不負呃:這決不會處理合法HTML的每一種可能的變化,但只要所有的輸入數據都像你的例子中的數據一樣簡單,它就可以工作。必要時可以對模式進行更改,以處理稍微複雜的輸入。然而,如果你的意圖是處理任何格式良好的HTML文檔作爲輸入,那麼你應該考慮一個實際的HTML解析器,而不是使用正則表達式。

+0

通過像這樣包含''s''' \\ s * <[^>] +> \ s */g''將會消除結果中的所有空格。 –

+0

@PedroPinheiro普德點。我沒有注意到OP中的所需輸出確實已經移除了空格。我會相應地更新我的答案。但是,Python中不需要bookend-slashes。此外,'re.sub'默認使用* global *選項,所以'g'也是不必要的。 –