2015-12-12 92 views
3

我有一些HTML代碼中有很多行的,我想刪除這個樣子從HTML代碼

<span style="position:absolute; border: black 1px solid; left:94px; top:600px; width:6px; height:10px;"></span> 

現在也有跨度,在它們之間具有文字標籤過濾掉空標籤我想保持。

我想使用python re.sub函數刪除那些無用的span標籤。我寫這個,但它不工作

html_code_filtered = re.sub('<span*></span>', '', html_code) 

我想我錯過正則表達式上的東西匹配正確的行嗎?

+1

使用beautifullsoup如果可能的話這種問題請參見http:// WWW .crummy.com/software/BeautifulSoup/ – maazza

+0

當span標籤僅包含一個img標籤時會發生什麼? –

+0

@CasimiretHippolyte在這種情況下,它不會被刪除,但我不必處理這樣的事情,因爲這不會發生在我正在處理的html文件中。 – Atirag

回答

5

您可以使用類似BeautifulSoup的HTML解析器刪除沒有文字的span元素。

工作例如:

from bs4 import BeautifulSoup 

data = """ 
<div> 
    <span style="position:absolute; border: black 1px solid; left:94px; top:600px; width:6px; height:10px;"></span> 
    <span>useful text</span> 
    <span></span> 
</div> 
""" 

soup = BeautifulSoup(data, "html.parser") 

# find and remove "span" elements with empty contents 
for useless in soup.find_all("span", text=lambda text: not text): 
    useless.extract() 

print(soup.prettify()) 

打印(你可以看到span元素沒有任何內容被拆除):

<div> 
<span> 
    useful text 
</span> 
</div> 
2

這裏的問題是n*尋找重複零次或多次的字符n。您可以使用.*?來匹配所有字符,直到下一個>字符。

>>> html_code = '<span style="position:absolute; border: black 1px solid; left:94px; top:600px; width:6px; height:10px;"></span>' 
>>> re.sub('<span.*?></span>', '', html_code) 
'' 

這就是說,參考maazaa的評論和答案,使用適當的html解析器進行更復雜的解析任務。