Как сопоставить больше параметров регулярных выражений в той же функции Python с необязательными аргументами? - PullRequest
0 голосов
/ 03 мая 2020

У меня есть эта Python функция:

def find_regex(regex, text, opzione2= None, opzione3 = None):
lista = []
for x in text:
    matches_prima = re.findall(regex, x)
    lunghezza1 = len(matches_prima)
    if opzione2 != None and opzione3 == None:
        matches_prima2 = re.findall(opzione2, x)
        lunghezza2 = len(matches_prima2)
        if opzione2 != None and opzione3 != None:
            matches_prima3 = re.findall(opzione3, x)
            lunghezza3 = len(matches_prima3)
lunghezza = len(matches_prima) + len(matches_prima2) + len(matches_prima3)


lista.append(lunghezza)
print("The number of {} matches is ".format(regex), sum(lista))

Предполагается, что сумма всех совпадений регулярных выражений в одном тексте должна быть суммой. Тем не менее, opzione2 и opzione3 являются необязательными, я могу иметь больше возможностей и включать больше регулярных выражений или нет. Однако этот код не работает.

Это называется как:

Один вариант

FIND_FASE12T = re.compile(r"\]\s1\s([\w\s]+)\s2\sT")

find_regex(FIND_FASE12T, testo_fasi)

Дополнительные параметры

FIND_FASE_PRIMA_123FRECCIAT = re.compile(r"\]\s*prima\s*1\s*([\w\s]+)\s*2([\w\s]+)\s*→\s*T")
    FIND_FASE_PRIMA_1FRECCIA23T = re.compile(r"\]\s*prima\s*1\s*([\w\s]+)\s*→\s*2([\w\s]+)\s*(T|3\sT)")
    FIND_FASE_PRIMA_FRECCIA1F2FT = re.compile(r"\]\s*prima\s*1\s*([\w\s]+)\s*→\s*2([\w\s]+)\s*→\s*(T|3\sT)")

find_regex(FIND_FASE_PRIMA_1FRECCIA23T, testo_fasi, FIND_FASE_PRIMA_123FRECCIAT, FIND_FASE_PRIMA_FRECCIA1F2FT)

Что я делаю не так?

1 Ответ

0 голосов
/ 03 мая 2020

Ваш лог c неверен:

if opzione2 != None and opzione3 == None:
    # we get here only if opzione3 is None…
    matches_prima2 = re.findall(opzione2, x)
    lunghezza2 = len(matches_prima2)
    # …so there is no way opzione3 is not None HERE:
    if opzione2 != None and opzione3 != None:
        matches_prima3 = re.findall(opzione3, x)

Возможно, вы хотите что-то подобное:

def find_regex(regex, text, opzione2= None, opzione3 = None):
    lista = []
    for x in text:
        matches_prima = re.findall(regex, x)
        matches_prima2 = []
        matches_prima3 = []
        if opzione2 is not None:
            matches_prima2 = re.findall(opzione2, x)
            if opzione3 is not None:
                matches_prima3 = re.findall(opzione3, x)
        lunghezza = len(matches_prima) + len(matches_prima2) + len(matches_prima3)
        lista.append(lunghezza)
    print("The number of {} matches is ".format(regex), sum(lista))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...