格式错误的xm中的转义额外引号

2024-04-26 23:21:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我的xml文件格式不正确,在标记中包含额外的引号。我想删除它们或替换为"e。 格式错误的XML看起来像:

<CLASS ATT2="PDX"R"088">

我的预期结果:

<CLASS ATT2="PDX R 088">
or
<CLASS ATT2="PDX&quot;R&quot;088">

我试着遍历所有的行并找到ATT first和last索引,但是它非常脏并且产生了太多的代码。你知道吗

有人有简单的解决办法吗?你知道吗


Tags: or标记格式错误xmlatt引号class
2条回答

也许不是最好的解决方案,但是因为你不能用(例如)解析它xml.etree文件由于它是无效的,您可以尝试使用下面的代码。你知道吗

它将:

  1. 打开文件
  2. 逐行读
  3. 如果有特定的字符串,则搜索每一行(例如CLASS
  4. 如果找到CLASS,则找到所有双引号("
  5. 检查是否找到两个以上的双引号,并用空格替换
  6. 更新行

警告:备份您的原始文件,因为这将修改它!!!

import re

f = open(r'YOUR/FILE/HERE',"r+b")
lines = f.readlines()
for idx, row in enumerate(lines):
     if "CLASS" in row:
         quote_index = [x.start() for x in re.finditer('\"', row)]
         if len(quote_index) > 2:
             replace_quote = quote_index[1:-1]
             correct_row = list(row)
             for quotes in replace_quote:
                 correct_row[quotes] = " "
             new_row = "".join(correct_row)
             lines[idx] = new_row
f.seek(0)
f.truncate()
f.write(''.join(lines))
f.close()

这不是100%的万无一失,但可能需要一点运气:

re.sub(r'(?<!=)"(?!>)', '&quot;', malformed_xml)

只替换前面没有=,后面也没有>的引号。你知道吗

如果=之后(或>之前)可能有空格,则不能再使用re模块,但^{} module (PyPI)可以处理此问题:

regex.sub(r'(?<!=\s*)"(?!\s*>)', '&quot;', malformed_xml)

相关问题 更多 >