📅  最后修改于: 2023-12-03 15:26:51.937000             🧑  作者: Mango
在 Web 开发中,数据通常以 HTML 格式呈现。然而,在某些情况下,我们需要从 HTML 中获取纯文本,此时我们需要移除 HTML 标签。本文将介绍使用 Python 的正则表达式删除除 br
之外的所有 HTML 标签。
使用正则表达式去除 HTML 标签,需要使用正则表达式的特性,即贪婪匹配和非贪婪匹配。在正则表达式中,*
和 +
都是贪婪的,而 ?
是非贪婪的。
下面是替换 HTML 标签的正则表达式:
import re
html_str = '<div><p>Hello, World!</p><a href="https://www.example.com">example</a></div>'
text_str = re.sub('<[^br].*?>', '', html_str)
print(text_str)
# 输出:<p>Hello, World!</p><br>
上述代码使用 re.sub()
方法替换了 HTML 标签。正则表达式 <[^br].*?>
匹配除了 br
标签之外的所有标签,并将其替换为空字符串。?
的作用是让 *
变成非贪婪匹配。
下面是完整的 Python 代码,在以上基础上,加入了对于 br
标签的特殊处理:
import re
def remove_html_tags(html_str):
text_str = re.sub('<([A-Za-z][A-Za-z0-9]*)\b[^>]*>(.*?)</\1>', '', html_str) # 删除所有标签
text_str = re.sub('<br\s*>', '<br>', text_str) # 将带属性的 br 标签转换为无属性的 br 标签
text_str = re.sub('<[^br].*?>', '', text_str) # 删除除 br 标签外的所有标签
return text_str
html_str = '<div><p>Hello, World!</p><a href="https://www.example.com">example</a><br/></div>'
text_str = remove_html_tags(html_str)
print(text_str)
# 输出:Hello, World!<br>
上述代码使用 remove_html_tags()
函数封装了整个流程。首先使用正则表达式删除所有 HTML 标签,随后将带属性的 br
标签转换为无属性的 br
标签,最后删除除 br
标签之外的所有标签。
本文介绍了使用 Python 的正则表达式删除除 br
之外的所有 HTML 标签,可以根据需要灵活调整正则表达式来满足不同需求。