Разбор повторяющегося ввода с использованием регулярного выражения в python - PullRequest
0 голосов
/ 18 июня 2020

Я новичок в python и никогда не использовал регулярное выражение, и меня просят использовать его в проекте. Мой входной файл использует следующий стиль:

tag <itemname> {
    <subitem>
    <subitem> -> possible relationship
    <~subitem> -> this is all irrelevant 
    <more subitems> 
} 

повторение снова и снова с разными тегами и разными данными разной длины. Мне нужно преобразовать это в json, и, используя модульные тесты, я уже выяснил, как надежно сделать это, учитывая, что у меня есть ОДИН из них, но я не могу понять, как надежно проанализировать файл с тысячами структур выше одной ' tag 'за раз.

По сути, я пытаюсь выяснить, как я могу прочитать эту первую строку (имя элемента) и все, что находится между следующими двумя фигурными скобками, многократно из файла и в идеале преобразовать ее в повторяемую форму, с которой я могу работать . Может ли кто-нибудь дать мне совет?

1 Ответ

0 голосов
/ 18 июня 2020

Если у вас есть строка типа so-

tag <itemname> {
    <subitem>
    <subitem> -> possible relationship
    <~subitem> -> this is all irrelevant 
    <more subitems> 
} 

tag <itemname> {
    <subitem>
    <subitem> -> possible relationship
    <~subitem> -> this is all irrelevant
    <more subitems>
    <more subitems>
}

(и, возможно, многие другие теги)

И вам просто нужен список каждого тега.

Вы можете использовать - (tag .+ {\n(?:.+\n)*?})

Ознакомьтесь с демонстрацией здесь

Ваш код будет выглядеть как-

s = """tag <itemname> {
    <subitem>
    <subitem> -> possible relationship
    <~subitem> -> this is all irrelevant 
    <more subitems> 
} 

tag <itemname> {
    <subitem>
    <subitem> -> possible relationship
    <~subitem> -> this is all irrelevant
    <more subitems>
    <more subitems>
}
"""

tags = re.findall(r'(tag .+ {\n(?:.+\n)*?})', s)

# Just to test out the tags
for tag in tags:
    print(tag)

Теперь вы можете запустить свой собственный парсинг по каждому тегу.

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