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

如何用简易方法解析包含HTML代码的字符串?

简易解析这段HTML表格行的方案

嘿,针对你给出的这种结构规整的HTML表格行(<tr>包含多个<td>),我给你两个超实用的简易解析方案,不用依赖重型框架,上手就能用:

方案一:用Python内置的html.parser(严谨可靠)

Python自带的HTML解析模块完全能搞定这个需求,它会正确处理HTML标签的嵌套和属性,比正则更稳妥。示例代码如下:

from html.parser import HTMLParser

class TableRowParser(HTMLParser):
    def __init__(self):
        super().__init__()
        self.current_td = False
        self.td_contents = []

    def handle_starttag(self, tag, attrs):
        # 当遇到<td>标签时,标记开始收集内容
        if tag.lower() == 'td':
            self.current_td = True

    def handle_endtag(self, tag):
        # 当遇到</td>标签时,标记结束收集
        if tag.lower() == 'td':
            self.current_td = False

    def handle_data(self, data):
        # 收集<td>里的文本内容,去掉首尾空白
        if self.current_td:
            cleaned_data = data.strip()
            self.td_contents.append(cleaned_data if cleaned_data else None)

# 你的HTML字符串(这里用你给出的示例)
html_str = '''<TR ALIGN=RIGHT VALIGN=TOP> <TD ALIGN=CENTER>TN</TD> <TD></TD> <TD ALIGN=CENTER>W</TD> <TD ALIGN=LEFT>I-40</TD> <TD>1.7</TD> <TD>0:01</TD> <TD></TD> <TD ALIGN=LEFT>+I 40 I 440, TN</TD> <TD>560.8</TD> <TD>8:57</TD> <TD>1198.3</TD> <TD>19:36</TD> </TR>'''

parser = TableRowParser()
parser.feed(html_str)
parser.close()

# 输出每个<td>的内容
print("解析结果:")
for idx, content in enumerate(parser.td_contents):
    print(f"第{idx+1}个TD内容:{content}")

这个方案的好处是完全原生,不需要额外安装依赖,而且能处理各种合法的HTML格式(比如标签大小写、多余空格),适合后续可能扩展的场景。

方案二:用正则表达式(快速简洁)

如果你的HTML结构完全固定(就像示例里这样,<td>没有嵌套其他标签),用正则会更快捷,一行核心代码就能提取所有<td>的内容:

import re

html_str = '''<TR ALIGN=RIGHT VALIGN=TOP> <TD ALIGN=CENTER>TN</TD> <TD></TD> <TD ALIGN=CENTER>W</TD> <TD ALIGN=LEFT>I-40</TD> <TD>1.7</TD> <TD>0:01</TD> <TD></TD> <TD ALIGN=LEFT>+I 40 I 440, TN</TD> <TD>560.8</TD> <TD>8:57</TD> <TD>1198.3</TD> <TD>19:36</TD> </TR>'''

# 匹配所有<td>标签里的内容,忽略标签属性
td_pattern = re.compile(r'<TD[^>]*>(.*?)</TD>', re.IGNORECASE)
td_contents = [match.group(1).strip() or None for match in td_pattern.finditer(html_str)]

# 输出结果
print("解析结果:")
for idx, content in enumerate(td_contents):
    print(f"第{idx+1}个TD内容:{content}")

⚠️ 注意:正则处理HTML有局限性,如果后续<td>里出现嵌套标签(比如<td><span>文本</span></td>),正则就会失效。但对于你给出的这种简单场景,它足够高效。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:37:37