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

Python re.sub()处理XML多余空格失效问题求助

处理XML文件多余空格的正则问题

问题场景

生成的XML文件包含大量多余空格,导致解析错误,需要删除:

  • 每个<前的所有空格
  • 每个>后的所有空格

尝试用Python的re.sub()处理,第一个正则生效,但第二个完全不匹配。

原代码

import re
import os
f2 = open(r"C:\output_clean.xml", "a")

lines = open(r"C:\output.xml", "r").readlines()
for line in lines:
        line = re.sub(r"\s*<", "<", line)
        line = re.sub(r">\s*", ">", line)
        
        f2.write(line)

f2.close()

原XML片段

<?xml version="1.0"?><ImportExportG1>   <DOCVENTE>      <TIPDOC>         B1      </TIPDOC>      <RAGBOL>         A      </RAGBOL>...

预期结果

<?xml version="1.0"?><ImportExportG1><DOCVENTE><TIPDOC>B1</TIPDOC><RAGBOL>A</RAGBOL>...

实际结果

<?xml version="1.0"?><ImportExportG1><DOCVENTE><TIPDOC>         B1</TIPDOC><RAGBOL>         A</RAGBOL>...

问题原因

原代码用readlines()按行读取文件,若>和后续的空格/文本不在同一行(比如被换行分隔),第二个正则>\s*只能匹配当前行内>后的空格,无法跨行匹配换行符+空格的组合,导致标签内的空格无法被删除。同时,追加模式("a")写入会导致多次运行重复输出内容。

解决方案

方案1:正则批量处理(适合无保留文本空格需求)

一次性读取整个文件内容,避免按行处理的局限性,同时用with语句自动管理文件资源:

import re

with open(r"C:\output.xml", "r", encoding="utf-8") as input_file, \
     open(r"C:\output_clean.xml", "w", encoding="utf-8") as output_file:
    # 一次性读取全部XML内容
    xml_content = input_file.read()
    # 删除<前的所有空格
    xml_content = re.sub(r"\s*<", "<", xml_content)
    # 删除>后的所有空格(支持跨换行匹配)
    xml_content = re.sub(r">\s*", ">", xml_content)
    # 写入处理后的内容
    output_file.write(xml_content)

方案2:用XML解析库处理(需保留合法文本空格)

如果XML中存在需要保留的文本空格,建议用专业XML库精准清理标签间空格,避免正则误删内容:

import xml.etree.ElementTree as ET
from xml.etree.ElementTree import tostring

# 解析XML文件
tree = ET.parse(r"C:\output.xml")
root = tree.getroot()

# 递归清理元素的文本和尾部空格
def clean_whitespace(element):
    if element.text:
        element.text = element.text.strip()
    if element.tail:
        element.tail = element.tail.strip()
    for child in element:
        clean_whitespace(child)

clean_whitespace(root)

# 写入处理后的XML
with open(r"C:\output_clean.xml", "wb") as output_file:
    output_file.write(tostring(root, encoding="utf-8"))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 10:20:36