Python: использование регулярного выражения для выделения текста в большом тексте - PullRequest
0 голосов
/ 15 марта 2020
s="""set(Q)
    {
information 1
    }

set(CP)
    {
information 2
    }
set(R)
    {
information 3
    }
"""

как сделать функцию f, которая принимает в качестве входных данных идентификатор, подобный (CP, R), для точного выбора

пример: f ("R") ------> set (R) {информация 3}

Примечание: когда я использовал этот код: он дал мне: set (Q) {информация 1}

set (CP) {информация 2} set ( R)

import re
def f(identifier) :

re.findall(r"set\({}\.+set)".format(identifier),s)

1 Ответ

0 голосов
/ 15 марта 2020

Вы должны использовать re.finditer, чтобы получить индекс шаблона поиска, затем циклически перебирать строку до } , сохраняя при этом содержимое, которое вам нужно

import re

s = """set(Q)
    {
information 1
    }

set(CP)
    {
information 2
    }
set(R)
    {
information 3
    }
set(Q)
    {
information 13
    }
"""
# print (s)


def f(identifier=''):
    var_to_return = []
    search_result = re.finditer(r'set\('+identifier+r'\)', s)
    for result in search_result:
        str_to_save = ''
        idx = result.span()[1]
        while True:
            str_to_save += s[idx]
            idx += 1
            if str_to_save[-1] == '}':
                break

        var_to_return.append(str_to_save)
    return var_to_return


print(f('Q'))

. массив с найденными элементами:

['\ n {\ ninformation 1 \ n}', '\ n {\ ninformation 13 \ n}']

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