使用正则表达式从xml中删除特定标记,而不删除标记后的数据

2024-06-08 20:55:10 发布

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

我有一个XML,其中有一些不匹配的标记ENAMEX,我正试图删除这些标记

<Subject stype="ORG" xref="1234">
    <SubjectFullName type="L"><ENAMEX type="ORGANIZATION" id="ORG-112233-000">WEBSITE.COM</SubjectFullName>
    <SubjectLastName type="L">WEBSITE.COM</ENAMEX></SubjectLastName>
    <SubjectPhone type="Work">1234567890</SubjectPhone>
</Subject>

我尝试了以下代码

mm = 'ENAMEX'
extra_tag_search = f"</{mm}><"
add_closing_tag_search = f"<{mm}(?!.*</{mm}>)(.*)"
add_closing_tag_replace = f"<{mm}>\1</{mm}>" 
ffx = re.sub(extra_tag_search, "<", ff)
fff = re.sub(add_closing_tag_search, add_closing_tag_replace, ffx)

但是它只修复了一个问题,而导致了另一个问题--WEBSITE.COM已经消失,现在SubjectFullName没有结束标记

<Subject stype="ORG" xref="1234">
    <SubjectFullName type="L"><ENAMEX></ENAMEX>
    <SubjectLastName type="L">WEBSITE.COM</SubjectLastName>
    <SubjectPhone type="Work">1234567890</SubjectPhone>
</Subject>

最终,我并不真正需要ENAMEX标记,所以我只想在它没有结束标记时从xml中删除它。我的代码确实负责删除SubjectLastName中的无关ENAMEX标记,但我正在努力使用正确的正则表达式将其从SubjectFullName标记中删除,而不同时删除WEBSITE.COM</SubjectFullName>。我试图用\1替换,但显然不起作用,只留下了那个奇怪的方形符号。最终,我想以

<Subject stype="ORG" xref="1234">
    <SubjectFullName type="L">WEBSITE.COM</SubjectFullName>
    <SubjectLastName type="L">WEBSITE.COM</SubjectLastName>
    <SubjectPhone type="Work">1234567890</SubjectPhone>
</Subject>

Tags: 标记orgcomaddsearchtagtypewebsite