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

如何用Python修复含空格或换行的损坏XML标签?

修复XML损坏标签的Python方案

原代码的问题

  1. re.sub未生效:re.sub()会返回修改后的新字符串,不会原地修改原data变量,你没把返回值重新赋值给data,所以看不到修改效果。
  2. 遍历方式冗余:用iterator变量手动计数完全没必要,直接用zip()同时配对原标签和修复后的标签更简洁。
  3. 正则匹配范围有限:原正则只匹配了包含换行的标签,但有些损坏标签可能只有空格没有换行,或者换行位置不在你预设的位置,匹配不全。

更简洁的Pythonic实现

直接用re.sub()的回调函数,一次性匹配所有损坏的标签并完成修复,不用分两步处理:

import re

with open('file.xml', 'r') as file:
    data = file.read()

# 定义修复函数:清除标签内的换行和空格
def fix_tag(match):
    tag = match.group(0)
    return tag.replace('\n', '').replace(' ', '')

# 匹配所有<开头、>结尾,且中间包含换行或空格的标签
fixed_data = re.sub(r'<[^>]*[\n ][^>]*>', fix_tag, data)

# 保存修复后的内容
with open('fixed_file.xml', 'w') as file:
    file.write(fixed_data)

代码说明

  • 正则r'<[^>]*[\n ][^>]*>':匹配所有<开头、>结尾,且中间存在换行或空格的标签,覆盖了换行拆分、插入空格的损坏情况。
  • 回调函数fix_tag:对每个匹配到的损坏标签,直接清除其中的换行和空格,返回修复后的标签。
  • 直接通过一次re.sub()完成所有替换,代码更简洁高效,避免了多次循环的冗余操作。

验证替换过程(可选)

如果需要查看替换前后的对比,可以在替换前先打印匹配到的内容:

matches = re.findall(r'<[^>]*[\n ][^>]*>', data)
for match in matches:
    fixed = match.replace('\n', '').replace(' ', '')
    print(f"原标签:{repr(match)}\n修复后:{repr(fixed)}\n")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 14:00:58