You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用re.sub精准删除带指定class的HTML标签且不影响其他标签

现有代码问题

  • 未匹配HTML中的换行、缩进空白字符,正则写的是连续拼接的标签结构,和实际带格式的HTML完全对不上,无法命中目标内容
  • 匹配范围错误,正则直接从<article开头匹配到</article>结尾,替换后会清空整个文章块的所有内容,无法保留剩余p标签的文本

方案1:推荐使用HTML解析器实现(比正则稳定,兼容性更强)

处理HTML内容优先用专用解析器,避免正则遇到标签换行、属性顺序变化、额外属性等场景就失效的问题,示例用BeautifulSoup实现:

from bs4 import BeautifulSoup

def myFunction(result):
    soup = BeautifulSoup(result, 'html.parser')
    # 找到所有class为ghf的p标签并删除
    for p in soup.select('p.ghf'):
        p.decompose()
    # 提取剩余所有文本,按行分割过滤空行后拼接
    text_lines = [line.strip() for line in soup.get_text().split('\n') if line.strip()]
    return '\n'.join(text_lines)

调用后输出就是你要的:

Some other Text
A different Text

方案2:正则修改版(仅适合固定结构的HTML场景)

如果一定要用正则实现,需要调整匹配规则,增加空白匹配,只命中目标p标签本身:

import re

def myFunction(result):
    # 匹配所有带class="ghf"的p标签,包括标签前后的空白字符
    # re.DOTALL 保证.*可以匹配换行符
    result = re.sub(r'\s*<p class="ghf">.*?</p>\s*', '', result, flags=re.DOTALL)
    # 提取剩余文本,过滤空行
    text_lines = [line.strip() for line in re.sub(r'<[^>]+>', '', result).split('\n') if line.strip()]
    return '\n'.join(text_lines)

注意正则处理HTML有非常多边界情况,比如属性顺序变了、有额外属性、单双引号变化都会导致匹配失效,仅在你确定HTML结构100%固定的场景下使用。


内容的提问来源于stack exchange,提问作者Raheesh Kattumunda Muhamed

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:45:07