如何用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))
后续数据解析思路
- 计算合并后每个表头字段对应的字符宽度范围(可通过定位表头单词的索引实现)
- 遍历数据行,按宽度截取对应字段内容,去除前后空格后转化为结构化数据
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

