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

Python:如何用正则表达式提取HTML表格行中的指定字段

当然可以实现!

你想要的这种「占位符式」提取逻辑,正好对应正则表达式里的捕获组功能——就像你用C语言的%s标记要提取的内容一样,正则里用()把需要捕获的未知内容包起来,就能精准提取对应位置的字段。

具体实现思路

你的目标模板是:

<TD>%s</TD><TD><A HREF="%s">%s</TD><TD><EM>%s</EM></TD>

我们只需要把每个%s替换成正则的捕获组语法(.*?)(非贪婪匹配,避免过度匹配),同时保留所有固定的HTML标签作为匹配框架,就能得到对应的正则表达式:

<TD>(.*?)</TD><TD><A HREF="(.*?)">(.*?)</TD><TD><EM>(.*?)</EM></TD>

这里的每个(.*?)就是你要的「占位符」,分别对应field1、url、field2、field3。

示例代码(以Python为例)

import re

# 你的目标HTML行
html_line = '<TD>field1</TD><TD><A HREF="http://sample.url.com">field2</TD><TD><EM>field3</EM></TD>'

# 定义匹配模板(用原始字符串避免转义问题)
pattern = r'<TD>(.*?)</TD><TD><A HREF="(.*?)">(.*?)</TD><TD><EM>(.*?)</EM></TD>'

# 完全匹配整行内容(因为你的格式是固定的)
match_result = re.fullmatch(pattern, html_line)

if match_result:
    # 按捕获组顺序提取内容
    field1 = match_result.group(1)
    url = match_result.group(2)
    field2 = match_result.group(3)
    field3 = match_result.group(4)
    
    print(f"提取结果:field1={field1}, url={url}, field2={field2}, field3={field3}")
    # 输出:提取结果:field1=field1, url=http://sample.url.com, field2=field2, field3=field3

关键细节说明

  • 为什么用.*?而不是.*?
    .*是「贪婪匹配」,会尽可能多的抓取字符,可能会把后面的标签也包含进去;而.*?是「非贪婪匹配」,会在遇到第一个对应的结束标签时停止,更适合你这种固定格式的场景。
  • 为什么用re.fullmatch?
    因为你明确说每行格式固定,用fullmatch可以确保整行内容完全符合模板,避免匹配到不符合格式的行。

这种思路本质上和你之前见过的「用正则找已知标记」是相通的,只是反过来用已知标记作为“框架”,捕获中间的未知内容——正则完全支持这种用法,而且在格式固定的场景下非常高效。

内容的提问来源于stack exchange,提问作者Green Cloak Guy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:58:24