我有一些HTML代码,其中有许多我想要移除的行看起来像这样
<span style="position:absolute; border: black 1px solid; left:94px; top:600px; width:6px; height:10px;"></span>
现在还有span标签,它们之间有文字,我想保留。
我想使用python re.sub函数删除那些无用的span标签。我写了这个,但它没有用
html_code_filtered = re.sub('<span*></span>', '', html_code)
我想我在正则表达式上遗漏了一些内容以正确匹配这些行?
答案 0 :(得分:6)
您可以使用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>
答案 1 :(得分:2)
这里的问题是n*
寻找重复零次或多次的字符。您可以使用.*?
匹配所有字符,直到下一个&gt;字符。
>>> 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解析器来处理更复杂的解析任务。