如何保留a、img、h3标签并移除其他HTML标签?当前正则失效
解决方案
方法一:正则表达式(适合简单场景)
你可以用反向匹配的正则规则,只保留a、img、h3标签,移除其他所有HTML标签。适配的正则表达式如下:
<(?!\/?(a|img|h3)\b)[^>]+>
规则说明:
<:匹配标签的起始符号(?!\/?(a|img|h3)\b):负向预查,排除以a、img、h3开头的标签(包括</a>这类闭合标签)[^>]+>:匹配标签剩余部分直到闭合符号>
用你的示例文本测试,替换后结果为:
Test paragraph <a href="ttt">link</a> dadadsadsa <img src="#"> <h3>This is a test title</h3>
方法二:HTML解析库(推荐,更可靠)
正则处理HTML容易出现边缘问题(比如标签内特殊字符、嵌套标签),更稳妥的方式是用专业HTML解析库,以Python的BeautifulSoup为例:
from bs4 import BeautifulSoup html_content = """ <article> <p>Test paragraph</p> <a href="ttt">link</a> <figure>dadadsadsa</figure> <img src="#"> <h3>This is a test title</h3> </article> """ soup = BeautifulSoup(html_content, "html.parser") # 遍历所有标签,移除不在白名单内的标签,保留内部内容 for tag in soup.find_all(True): if tag.name not in ["a", "img", "h3"]: tag.unwrap() print(soup.prettify())
运行后输出结果:
Test paragraph <a href="ttt">link</a> dadadsadsa <img src="#"/> <h3>This is a test title</h3>
内容的提问来源于stack exchange,提问作者Kojak Eugenio
相关产品推荐
相关产品推荐

