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

如何用Python与regex解析HTML <pre>内表格并合并两行表头?

解决
标签中拆分表头的合并与解析问题 

问题描述

  • 格式混乱的文件内容被包裹在HTML <pre> 标签中,表头被拆分为两行:

    CLASS CLOCK NET
    ID# PLACE PLACE FINISHER TIME TIME PACE

  • 直接去除空格会导致字段对应错误(例如"clock"会关联到Finisher而非Time),期望合并后的正确表头为:ID# | Place | Class Place | Finisher | Clock Time | Net Time | Pace
  • 最终目标是将整个文件解析为结构化字段

解决方案

通过Python结合正则匹配表头单词位置,按语义关联合并两行表头,后续可基于固定宽度拆分数据行。

Python实现代码

import re

# 从<pre>标签中提取的表头两行原始内容
header_line1 = "</B>             CLASS                                            CLOCK       NET    "
header_line2 = "  ID#  PLACE PLACE         FINISHER                          TIME       TIME     PACE"

# 清理第一行的无关标签与首尾空格
clean_line1 = re.sub(r'</B>', '', header_line1).strip()
# 清理第二行首尾空格
clean_line2 = header_line2.strip()

# 匹配第一行中的关键字:CLASS、CLOCK、NET
line1_keywords = [match.group() for match in re.finditer(r'\b(CLASS|CLOCK|NET)\b', clean_line1)]
# 匹配第二行中的关键字:ID#、PLACE、FINISHER、TIME、PACE
line2_keywords = [match.group() for match in re.finditer(r'\b(ID#|PLACE|FINISHER|TIME|PACE)\b', clean_line2)]

# 按语义合并表头字段
merged_header = [
    line2_keywords[0],  # ID#
    line2_keywords[1],  # Place
    f"{line1_keywords[0]} {line2_keywords[2]}",  # Class Place
    line2_keywords[3],  # Finisher
    f"{line1_keywords[1]} {line2_keywords[4]}",  # Clock Time
    f"{line1_keywords[2]} {line2_keywords[5]}",  # Net Time
    line2_keywords[6]   # Pace
]

# 输出合并后的标准表头
print(" | ".join(merged_header))

后续数据解析思路

  1. 计算合并后每个表头字段对应的字符宽度范围(可通过定位表头单词的索引实现)
  2. 遍历数据行,按宽度截取对应字段内容,去除前后空格后转化为结构化数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 19:58:17