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

Python HTML解析需求:提取(id, value)格式数组

从HTML中提取(id, value)格式的数组

你的正则思路方向是对的,但可以优化一下,避免匹配不到或者误匹配的情况。先理清楚核心逻辑:每个title属性对应id,对应的value则在带有id="content wrap"的元素中对吧?

优化后的正则表达式

假设你的HTML结构大概是这样:

<div title="id1"><span id="content wrap">value1</span></div>
<div title="id2"><span id="content wrap">value2</span></div>

用下面的正则可以更稳定地捕获配对:

import re

# 编译正则,加上re.DOTALL让.能匹配换行符
pattern = re.compile(r'title="([^"]+)".*?id="content wrap".*?>([^<]+)<', re.DOTALL)
matches = pattern.findall(source_html)

正则拆解

  • title="([^"]+)": 捕获title里的id,用[^"]+替代.+?,避免在title属性里遇到转义引号或者意外字符时出错
  • .*?: 非贪婪匹配title和content wrap元素之间的任意内容,防止跳过多个配对
  • id="content wrap": 精准匹配目标元素的id
  • .*?>: 匹配到content wrap元素的闭合标签
  • ([^<]+)<: 捕获元素内的文本值(假设value是纯文本,没有嵌套标签)

处理复杂情况

如果value里可能包含HTML标签或者换行,就需要调整捕获逻辑,再做清洗:

pattern = re.compile(r'title="([^"]+)".*?id="content wrap"(.*?)</', re.DOTALL)
raw_matches = pattern.findall(source_html)
# 清洗掉HTML标签,整理成干净的配对
cleaned_pairs = [(id, re.sub(r'<.*?>', '', value.strip())) for id, value in raw_matches]

更稳妥的替代方案:用HTML解析器

其实正则处理HTML容易踩坑(比如标签嵌套、属性顺序变化),用BeautifulSoup这类解析器会更靠谱:

from bs4 import BeautifulSoup

soup = BeautifulSoup(source_html, 'html.parser')
pairs = []
# 找到所有content wrap元素
for wrap_elem in soup.find_all(id="content wrap"):
    # 找带title属性的父元素
    parent = wrap_elem.find_parent(title=True)
    if parent:
        pairs.append((parent['title'], wrap_elem.get_text(strip=True)))

这种方法不用纠结正则的细节,能适应更多HTML结构的变化。

内容的提问来源于stack exchange,提问作者K. H.

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:29:48