Использование регулярных выражений для работы с тегами в пакете python RE - PullRequest
0 голосов
/ 08 февраля 2020

Входной текстовый файл содержит:

<html>
<header>
<title>This is a title</title>
</header>
<body>
        <div>This is a div <div>This is a nested div</div></div>
</body>
</html>

, и я хочу вывести в другой текстовый файл следующее:

<l>
<r>
<e>This is a title</e>
</r>
<y>
        <v>This is a div <v>This is a nested div</v></v>
</y>
</l>

Использование Regex в python как мне это сделать? Обновить !!!! Я пробовал для <>, как это:

import re
def run():
    with open('input.txt') as f:
        fout  = open('output.txt', 'w')
        count = 0
        for line in f:
            if not line:
                continue
            pat = re.findall('<[a-zA-Z]+>',line)
            for l in pat:
                y = re.sub('<[a-zA-Z]+>', '<{}>'.format(l[-2]), line, count=0, flags=0)
                fout.write(y)

1 Ответ

0 голосов
/ 09 февраля 2020

Надеюсь, еще не поздно предложить возможное решение этой проблемы. Вот мой код:

import re

def run():

    f = """<html>
<tag>bruh</tag>
<a><bro>text here</bro></a>
</html>
"""
    g = ""

    while g != f:
        g = f
        f = re.sub(r'<(.+?)(\w)>([\w\W\n\r]*)</\1\2>', r'<\2>\3</\2>', f)

    print(f)

run()

Вывод:

<l>
<r>
<e>This is a title</e>
</r>
<y>
        <v>This is a div <v>This is a nested div</v></v>
</y>
</l>

Я продолжаю использовать одну и ту же функцию замещения до тех пор, пока не будет больше возможных замен, обозначенных g != f. т.е. пока замещенный текст и основной текст не совпадают.

Примечание: Я в основном пользователь Java, и в прошлом я использовал Python, может быть, 5 раз. Это не оправдание для оправдания (наиболее вероятного) неправильного ответа, но как предупреждение о том, что может быть несколько ошибок в определенных c случаях, о которых я не знаю.

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