Python:删除 HTML 标签和 HTML 标签之间的文本

lla*_*ato 3 python regex python-3.x

我正在尝试删除 HTML 标记(Python 3),但也在尝试删除它们之间的文本。我下面的代码片段似乎没有给我我正在寻找的结果,我在 SO 上发现的所有其他问题似乎只考虑删除 HTML 标签,但保留 HTML 标签内的文本,这不是什么我正在努力做。

当前代码

import re
...
price="12.00 <b>17.50</b>"
price=re.sub('<[^>]*>', '', price)
Run Code Online (Sandbox Code Playgroud)

细绳

12.00 <b>17.50</b>
Run Code Online (Sandbox Code Playgroud)

预期结果

12.00
Run Code Online (Sandbox Code Playgroud)

当前结果

12.00 17.50
Run Code Online (Sandbox Code Playgroud)

ale*_*cxe 5

您也可以使用 HTML 解析器来完成,例如BeautifulSoup. 这个想法是找到所有的标签并分解它们,然后得到剩下的:

In [8]: from bs4 import BeautifulSoup

In [9]: price = "12.00 <b>17.50</b>"

In [10]: soup = BeautifulSoup(price, "html.parser")

In [11]: for elm in soup.find_all():
    ...:     elm.decompose()
    ...:     

In [12]: print(soup)
12.00 
Run Code Online (Sandbox Code Playgroud)

而且,这是一个著名的主题,解释了为什么不应该使用正则表达式处理 HTML: