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

Python使用正则提取XML中ENTITY实体值失败如何解决?

问题原因与修复方案

核心错误点

    1. re.match() 要求正则从字符串开头位置匹配,你的XML行开头是<!,但你的正则以ENTITY开头,完全匹配不上。
    1. 正则表达式没有定义捕获组,就算匹配成功,groups()也会返回空元组,自然加不到列表里。
    1. 正则里的空格匹配逻辑、特殊符号没有做兼容处理,很容易匹配失败。

修复后的代码

首先注意要导入re模块,你原代码遗漏了该导入步骤:

import re

# 优化文件读取写法,自动关闭文件避免资源泄露
with open("file.xml", "r", encoding="utf-8") as xml:
    lines = xml.readlines()

result = "ABC"
var_search_result_list = []
# 补充开头匹配规则,给需要提取的数值部分加捕获组
var_searcher = r"<!ENTITY\s+" + result + r'\s+"([^"]+)">'

for line in lines:
    # 对行做去首尾空白处理,避免缩进、换行符导致匹配失败
    var_search_result = re.match(var_searcher, line.strip())
    if var_search_result:
        # 直接取第一个捕获组的内容存入列表
        var_search_result_list.append(var_search_result.group(1))

print(var_search_result_list)

逻辑说明

  • 正则开头补充了<!匹配XML实体的固定前缀,用\s+匹配任意数量的空格,兼容实体名和值之间的多个空格格式。
  • 把需要提取的数值部分用()包裹为捕获组,匹配成功后直接用group(1)就能拿到对应的值。
  • 行处理前增加strip()操作,过滤行首尾的空白、换行符,进一步提升匹配容错性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 14:18:05