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

从类XML格式midx文件提取JPG路径失败,请求排查问题

问题排查与解决方案

原代码的问题点

  • 正则语法错误:Python的re.compile不需要用/包裹模式(这是JavaScript的写法),直接传入正则字符串即可。
  • 捕获逻辑失效:原正则(\S\w*)*无法匹配完整文件路径——路径中的下划线、点号(除JPG后缀外)都会被排除,且重复捕获组只会保留最后一次匹配的片段,无法得到完整路径。
  • 无属性限定:没有锚定到filenames属性,可能误匹配其他位置的JPG路径。
  • 逐行读取局限:若dataset标签跨多行,逐行读取会导致匹配失败。

修正方案1:优化正则表达式

直接匹配filenames属性内的JPG路径,读取整个文件内容避免跨行问题:

import re

# 读取整个文件内容,处理可能的跨行标签
with open('visus8.midx', 'r') as f:
    file_content = f.read()

# 匹配filenames属性中以.JPG结尾的路径,兼容大小写
pattern = re.compile(r'filenames="([^"]+\.JPG)"', re.IGNORECASE)
jpg_paths = pattern.findall(file_content)

for path in jpg_paths:
    print(path)

正则说明:

  • filenames=":精确匹配属性名和开头双引号
  • ([^"]+\.JPG):捕获双引号内所有非引号字符,确保路径完整,且以.JPG结尾
  • re.IGNORECASE:兼容小写.jpg后缀的情况

修正方案2:用XML解析库(更可靠)

由于midx是类XML格式,用专业的XML解析库比正则更稳定,能自动处理标签结构、属性转义等情况:

import xml.etree.ElementTree as ET

# 解析midx文件
tree = ET.parse('visus8.midx')
root = tree.getroot()

# 遍历所有dataset标签,提取filenames属性
for dataset_tag in root.findall('.//dataset'):
    filename = dataset_tag.get('filenames')
    if filename and filename.endswith(('.JPG', '.jpg')):
        print(filename)

这个方法无需关注复杂的字符串匹配,直接通过XML节点和属性名提取内容,容错性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 01:41:29