Python регулярное выражение совпадает только со второй группой захвата - без использования первой группы захвата - PullRequest
0 голосов
/ 13 января 2020

У меня есть это регулярное выражение:

con = r"(((consignee)\s?(name)?\s?(and)?\s?(address)?)|((name)?\s?(and)?\s?(address)?\s?(of)?\s?(consignee)))"

Я пытаюсь сопоставить со следующими текстами:

txt1 = 'NAME AND ADDRESS OF CONSIGNEE :'
txt2 = '    consignee name and address :'

Я использую re.finditer() вот так:

match1 = [i.group() for i in re.finditer(con, txt1, re.IGNORECASE)]
match2 = [i.group() for i in re.finditer(con, txt2, re.IGNORECASE)]

Результат, который я получаю, таков:

>>> match1
['NAME AND ADDRESS OF CONSIGNEE']
>>> match2
['    consignee']

Мой желаемый результат - ['consignee name and address'] для match2. Хотя я уже добавил это в регулярное выражение, почему он не захватывает группу?

Я пытался переупорядочить регулярное выражение следующим образом:

con = r"(((name)?\s?(and)?\s?(address)?\s?(of)?\s?(consignee))|((consignee)\s?(name)?\s?(and)?\s?(address)?))"

Но все же в этом случае также match2 всегда только [' consignee']. Я также проверил здесь regex101 , который также дает тот же результат. Что я делаю не так?

1 Ответ

1 голос
/ 13 января 2020

Я убрал несколько скобок в шаблоне, и это сработало для меня. Каждая часть является дополнительной, кроме грузополучателя.

con = r"(consignee\s?(name)?\s?(and)?\s?(address)?|(name)?\s?(and)?\s?(address)?\s?(of)\s?consignee)"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...