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

如何使用正则表达式选取指定HTML标签内的内容?

嘿,这个问题挺常见的,但咱得先唠一句:正则表达式其实不是处理HTML的最佳选择——毕竟HTML是层级嵌套的结构,正则天生擅长处理线性文本,遇到复杂嵌套很容易翻车。不过如果你的HTML结构比较规整(比如目标div里没有复杂的嵌套div,或者结构可控),还是可以用正则来实现的,下面给你两种场景的方案:

场景1:目标div内部没有嵌套div

这种情况最简单,用非贪婪匹配就能搞定:

<div class="container header">(.*?)</div>
  • .*?是非贪婪匹配,会匹配到第一个</div>就停止,避免把后面无关的内容也捞进来。
  • 注意:如果你的HTML里有换行,得开启正则的「多行模式」(不同工具里的设置不一样:比如JavaScript加/s修饰符,Python用re.DOTALL参数)。

场景2:目标div内部有嵌套div(谨慎使用)

如果div里还有嵌套的div,普通正则就搞不定了,得用支持递归的正则引擎(比如Python的re模块、PCRE),用递归匹配来处理嵌套:

<div class="container header">((?:(?!<div[^>]*>|</div>).|(?R))*)</div>

这个正则的逻辑是:要么匹配一个不是div开始/结束标签的字符,要么递归匹配整个模式(处理嵌套的div)。但说实话,这个方法局限性极强——一旦HTML里有注释、属性带特殊字符或者结构稍微乱一点,就会匹配出错。

真心推荐的靠谱方案:用DOM解析器

与其跟正则死磕,不如用专门的HTML解析工具,不管嵌套多复杂都能精准获取内容:

  • JavaScript环境:直接用浏览器的DOM API,一行代码搞定:
    const targetDiv = document.querySelector('.container.header');
    const innerContent = targetDiv ? targetDiv.innerHTML : '';
    
  • Python环境:用BeautifulSoup库,代码也很简洁:
    from bs4 import BeautifulSoup
    
    html = """你的HTML代码片段"""
    soup = BeautifulSoup(html, 'html.parser')
    target_div = soup.find('div', class_='container header')
    if target_div:
        # 获取包含标签的内部内容
        inner_html = target_div.decode_contents()
        # 或者获取纯文本内容
        inner_text = target_div.get_text(strip=True)
        print(inner_html)
    

内容的提问来源于stack exchange,提问作者jojoi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:49:47