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

如何在HTML中分组匹配多个class为caja-anuncio的section节点?

如何批量提取HTML中指定结构的section节点?

问题场景

现有一段包含多个重复结构的HTML,需要提取所有符合以下特征的section节点:

  • 带有id="post-数字"属性
  • 带有class="caja-anuncio"属性

每个目标节点的结构为两层嵌套的section:

<section id="post-1149642" class="caja-anuncio ">
    <section class="foto"> ... OMITTED...
        </section> 
    <section class="caja-datos">
     ... OMITTED...
         </h5>
    
     </section>
    </section>

原正则的问题

你之前尝试的正则使用了贪婪匹配的(?s).*,会直接从第一个匹配的起始标签一直匹配到最后一个闭合标签,无法分割成单个的目标节点。

可行解决方案

方案1:改进正则表达式(适用于结构固定的场景)

使用非贪婪匹配限制匹配范围,确保每个匹配只对应一个目标节点:

(<section id="post-\d+" class="caja-anuncio\s*">((?s).*?)<\/section>\s*<\/section>)
  • (?s):让.可以匹配换行符,处理多行HTML
  • .*?:非贪婪匹配,遇到第一个符合的闭合标签就停止
  • 末尾匹配两个</section>,对应目标节点的两层嵌套结构

示例(Python):

import re

html = """你的HTML内容"""
# 提取完整的section节点
pattern = r'(<section id="post-\d+" class="caja-anuncio\s*">((?s).*?)<\/section>\s*<\/section>)'
results = re.findall(pattern, html)
for full_section, _ in results:
    print(full_section)

方案2:使用HTML解析器(更可靠,推荐)

正则处理HTML容易因结构变化失效,更推荐用专业的HTML解析库(比如Python的BeautifulSoup):

from bs4 import BeautifulSoup

html = """你的HTML内容"""
soup = BeautifulSoup(html, 'html.parser')
# 筛选符合条件的section节点
target_sections = soup.find_all(
    'section',
    id=lambda x: x and x.startswith('post-'),
    class_='caja-anuncio'
)

# 输出每个节点的完整HTML
for sec in target_sections:
    print(sec.prettify())

这种方法无需关心内部嵌套结构,只要外层标签符合条件就能精准提取,容错性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 19:51:13