用正则删除html标签可行但有局限,仅适用于简单规范场景;基础正则匹配单行标签,增强版需处理换行和注释;但无法安全处理脚本内>、嵌套结构或实体编码;推荐优先使用domparser、beautifulsoup等html解析器。> ↩

用正则删除 HTML 标签可行,但有明显局限——它适合简单、格式规范的场景(比如清洗用户输入的富文本片段),不适用于解析真实 HTML 文档。核心思路是匹配并替换掉所有以 结尾的标签结构。
基础正则:匹配单行普通标签
最常用的是:]*>
- 匹配左尖括号<br>
- <code>[^>]* 匹配任意数量非 > 的字符(即标签内部内容,不含嵌套)
- > 匹配右尖括号
这个表达式能处理像 <p></p>、<div class="a">、<code> 这类标准标签,也兼容自闭合标签如 <br> 或 <img src="x">(只要中间没出现 >)。
增强版:覆盖换行和常见干扰
如果 HTML 字符串含换行或注释,基础正则会失效。可改用:]*> 配合 点号匹配换行(如 JavaScript 的 /.../s 标志,Python 的 re.DOTALL),或更稳妥地用:]*(?:>|(?= ——但实际中更推荐分步处理:
- 先删 HTML 注释:
<!--[\s\S]*?--> - 再删 CDATA:
- 最后删标签:
]*>(启用 DOTALL)
必须注意的坑
正则无法安全处理以下情况:
- 标签内含
>,比如<script>alert("x>y");</script>—— 正则会提前截断 - 属性值含未转义的
或 <code>>(虽不符合规范,但真实数据中存在) - 嵌套标签(如
<div><p>text</p></div>)本身不会出错,但若混入 JS/CSS 内联代码就容易误删 - 实体编码(如
<)会被当作普通文本保留,不是标签,但看起来像
更可靠的做法(推荐)
如果环境允许,优先使用 HTML 解析器:
- JavaScript:用
DOMParser或临时div.innerHTML = str; div.textContent - Python:用
BeautifulSoup(soup.get_text())或html.parser - Java:用
Jsoup
它们能正确识别结构、忽略脚本/样式内容、处理编码,并天然规避正则的语义盲区。











