Удалите указанный тег c из xml с помощью регулярных выражений, не удаляя данные после тега - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть 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, только если у него нет конечного тега. Мой код позаботился об удалении лишнего тега ENAMEX в SubjectLastName, но я борюсь с правильным регулярным выражением, чтобы удалить его из тега 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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...