как выполнить непрерывный поиск и замену, пока строка не найдется в python? - PullRequest
2 голосов
/ 19 июня 2020

Я хочу удалить все пустые элементы в строке ниже. Если родительский элемент содержит только пустые дочерние элементы, тогда нам нужно удалить и родительские элементы.

Фактически, я предоставляю функцию замены в perl ниже. Но мне это нужно в python.

Perl:


    while($text =~ s/<[^\/><]+>\s*<\/[^\/><]+>//si){}

**Here is my Input string:**
text = <transaction>
    <trans>content</trans>
    <dir></dir>
    <curr>
        <currency></currency>
        <amount></amount>
    </curr>
</transaction>

**Here is my Output string:**
text = <transaction>
    <trans>content</trans>
</transaction>

1 Ответ

3 голосов
/ 19 июня 2020

Вы можете попытаться удалить все пустые теги или теги, содержащие только пробельные символы, методом re.findall, и когда он не найдет никаких тегов, l oop завершится и напечатает новую текстовую переменную.

import re

text = """<transaction>
    <trans>content</trans>
    <dir></dir>
    <curr>
        <currency></currency>
        <amount></amount>
    </curr>
</transaction>"""


empty_tags = True
while empty_tags:
    empty_tags = re.findall(r"\s*<.*></.*>|\s*<\w*>\W+</.*>", text)
    for tags in empty_tags:
        text = text.replace(tags, '')
print(text)

Вывод

<transaction>
    <trans>content</trans>
</transaction>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...