Как скопировать определенные теги и их содержимое в файл? - PullRequest
0 голосов
/ 29 мая 2019

У меня есть текстовый файл, который содержит много строк, таких как:

<tag1><style="1">"Lorem ipsum dolor...</style>"Lorem Ipsum dolor"</tag1><tag1>"Other Lorem ipsum Dolor"</tag1><tag1>"Lorem ipsum DOLOR"</tag1>

Что я хочу сделать, это скопировать каждую найденную с помощью строки шаблона регулярного выражения и вставить ее копию под каждым из отдельных совпадений, а затем изменить конкретное имя в скопированной строке на «tagen1», чтобы результат выглядел так:

<tag1><style="1">"Lorem ipsum dolor...</style>"Lorem Ipsum dolor"</tag1><tagen1><style="1">"Lorem ipsum dolor...</style>"Lorem Ipsum dolor"</tagen1>
<tag1>"Other Lorem ipsum Dolor"</tag1><tagen1>"Other Lorem ipsum Dolor"</tagen1><tag1>"Lorem ipsum DOLOR"</tag1><tagen1>"Lorem ipsum DOLOR"</tag1>

и т.д.

Я не совсем уверен, что делать дальше:

pattern = re.compile(r'<tag1>(.+?)<\/tag1>')

with open(f1) as f: 
    f1 = pattern.findall(f.read())

copy = list(zip(f1))

#here I'd like to perform copying from "copy" list to the file.

Как мне решить эту проблему?

1 Ответ

0 голосов
/ 10 июня 2019

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

Вероятно, должна быть какая-то библиотека / пакет, который бы помог нам в этом.

Для захвата тегов,

(<([\w\s=\"]+?)>)|(<\/([\w]+?)>)|(.+?)

Демо

Тест

# coding=utf8
# the above tag defines encoding for this document and is for Python 2.x compatibility

import re

regex = r"(<([\w\s=\"]+?)>)|(<\/([\w]+?)>)|(.+?)"

test_str = "<tag1><blah =\"1\">\"sdfhds^\"</blah>\"*@$%\"</tag1><some_different_tag>\"aihdihihaif\"</some_different_tag><tag1>\"92763972649@^&^(@$<>ihagHGWi!_*#&)!#&@#$!^#\"</tag1><tag1>\"sdwuqioyewoqiuy&%*(&!*#%(*!#$!$ 4545___)0rrf\"</tag1>"

matches = re.finditer(regex, test_str, re.MULTILINE)

for matchNum, match in enumerate(matches, start=1):

    print ("Match {matchNum} was found at {start}-{end}: {match}".format(matchNum = matchNum, start = match.start(), end = match.end(), match = match.group()))

    for groupNum in range(0, len(match.groups())):
        groupNum = groupNum + 1

        print ("Group {groupNum} found at {start}-{end}: {group}".format(groupNum = groupNum, start = match.start(groupNum), end = match.end(groupNum), group = match.group(groupNum)))

# Note: for Python 2.7 compatibility, use ur"" to prefix the regex and u"" to prefix the test string and substitution.

RegEx Circuit

jex.im визуализирует регулярные выражения:

enter image description here

RegEx

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

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