我有这样的文字:
text = """<div>
<h1>Title</h1>
<p>A long text........ </p>
<a href=""> a link </a>
</div>"""
使用纯 Python,没有外部模块我想要这个:
>>> print remove_tags(text)
Title A long text..... a link
我知道我可以使用 lxml.html.fromstring(text).text_content() 来做到这一点,但我需要在纯 Python 中使用 2.6+ 的内置或 std 库来实现相同的目标
我该怎么做?
最佳答案
使用正则表达式
使用正则表达式,您可以清理 <>
中的所有内容:
import re
# as per recommendation from @freylis, compile once only
CLEANR = re.compile('<.*?>')
def cleanhtml(raw_html):
cleantext = re.sub(CLEANR, '', raw_html)
return cleantext
某些 HTML 文本还可以包含未括在括号中的实体,例如 ' &nsbm
'。如果是这种情况,那么您可能希望将正则表达式编写为
CLEANR = re.compile('<.*?>|&([a-z0-9]+|#[0-9]{1,6}|#x[0-9a-f]{1,6});')
这个 link包含有关此的更多详细信息。
使用 BeautifulSoup
您也可以使用 BeautifulSoup
额外的包来找出所有的原始文本。
调用 BeautifulSoup 时需要显式设置解析器
我推荐"lxml"
如替代答案中所述(比默认答案( html.parser
)更强大(即无需额外安装即可使用)。
from bs4 import BeautifulSoup
cleantext = BeautifulSoup(raw_html, "lxml").text
但这并不妨碍你使用外部库,所以我推荐第一种解决方案。
编辑:使用 lxml
您需要 pip install lxml
.
关于从字符串中删除 HTML 标记的 Python 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9662346/