Python使用正则提取XML中ENTITY实体值失败如何解决?
问题原因与修复方案
核心错误点
re.match()要求正则从字符串开头位置匹配,你的XML行开头是<!,但你的正则以ENTITY开头,完全匹配不上。
- 正则表达式没有定义捕获组,就算匹配成功,
groups()也会返回空元组,自然加不到列表里。
- 正则表达式没有定义捕获组,就算匹配成功,
- 正则里的空格匹配逻辑、特殊符号没有做兼容处理,很容易匹配失败。
修复后的代码
首先注意要导入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
相关产品推荐
相关产品推荐

