как получить данные из необязательной группы в python регулярном выражении для примера ниже - PullRequest
0 голосов
/ 21 февраля 2020

данные 1

Привет: первый

Привет: второй

Добро пожаловать: третий

данные 2

Привет: первый

приветствие: третий

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

Мой код

import re
mat = re.search(r"Hi there:\n(.*)\n(Hello:\n(.*))?\nwelcome:\n(.*)", data1, re.DOTALL)
print(mat)
print(mat.group(1))
print(mat.group(2))
print(mat.group(3))

вывод я Получение:

<_sre.SRE_Match object at 0x10694aca8>
first   -> 

Привет: второй Нет Нет

1 Ответ

0 голосов
/ 21 февраля 2020

Вы можете использовать 3 группы и сделать вторую группу необязательной. Вы можете опустить re.DOTALL и вместо совпадения 0 или более пробельных символов \s* после сопоставления новой строки.

(Hi there:)\r?\n\s*(?:(Hello:)\r?\n\s*)?(welcome:)

Regex demo | Python demo

В коде, например, вы можете проверить, не является ли группа 2 None

import re

regex = r"(Hi there:)\r?\n\s*(?:(Hello:)\r?\n\s*)?(welcome:)"

data1 = ("Hi there:\n\n"
    "Hello:\n\n"
    "welcome:")

mat = re.search(regex, data1)

if mat:
    print(mat.group(1))
    if mat.group(2) is not None:
        print(mat.group(2))
    print(mat.group(3))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...