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

Python正则表达式提取HTML表格内容:匹配非<>字符问题

从HTML标签提取文本的正则匹配问题

问题背景

想用Python从HTML的table标签里提取纯文本,计划通过递归调用re.sub移除所有<...>格式的标签,最终得到目标文本。但写正则时搞不定匹配标签内容的逻辑,测试代码没生效,期望先得到Hello</td>,再递归处理得到Hello。测试代码如下:

import re

test_str = '<td style="color:blue">Hello</td>'
test_str = re.sub('<{1}^[<>].*>{1}','',test_str)
print(test_str)

问题分析

你写的正则<{1}^[<>].*>{1}完全逻辑错误:

  • <{1}等价于<,>{1}等价于>,没必要多此一举
  • ^[<>]里的^放在字符集外是表示行开头,不是取反,完全不符合你想匹配标签内部内容的需求
  • 整个正则根本匹配不了任何有效标签

解决方法

要匹配<...>格式的标签,用非贪婪匹配的正则<.*?>就可以,它会匹配从<开始到最近的>结束的内容,正好符合你分步替换的需求。再结合递归处理直到没有标签为止,代码如下:

import re

def strip_html_tags(text):
    # 替换所有<...>标签为空字符串
    processed_text = re.sub(r'<.*?>', '', text)
    # 如果还有残留标签,递归处理
    if '<' in processed_text:
        return strip_html_tags(processed_text)
    return processed_text

# 测试
test_str = '<td style="color:blue">Hello</td>'
print(strip_html_tags(test_str))  # 输出: Hello

补充说明

  • 正则里的r''是原始字符串,避免转义字符干扰
  • .*?是非贪婪匹配模式,能保证每次只匹配单个标签,不会把多个嵌套标签(比如<a>xxx</a>)当成一个整体匹配掉
  • 递归终止条件是字符串里没有<,说明所有标签都已被移除

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 17:52:50