#regex
#регулярное выражение
Вопрос:
У меня есть пример, который :
[Unit] =
[Diag] = Nilan zok-98
Alert danger C-00N47
[Unit] = 17B NORWAY
[Diag] = Mobari-testing-17-AB
Pair num to get 17-9881 to be testing
Class nump
[Unit] =
[Diag] = BLOC1
Я хочу извлечь этот пример из двух частей, как показано ниже :
Match 1
Group 1. [Unit] =
Group 2. [Diag] = Nilan zok-98
Alert danger C-00N47
Match 2
Group 1. [Unit] = 17B NORWAY
Group 2. [Diag] = Mobari-testing-17-AB
Pair num to get 17-9881 to be testing
Class nump
Match 3
Group 1. [Unit] =
Group 2. [Diag] = BLOC1
Я использовал (.*[Unit].*n).*(.*[Diag].*)
для получения решения, но раздел Diag всегда получает первую строку.
Вы найдете мое тестовое регулярное выражение здесь: https://regex101.com/r/p6nLiK/1
Ответ №1:
Вы можете использовать
([Unit].*)n([Diag].*(?:n. )*)
Смотрите демонстрацию регулярных выражений
Подробные сведения:
([Unit].*)
— Группа 1:[Unit]
и остальная часть строкиn
— символ перевода строки([Diag].*(?:n. )*)
— Группа 2:[Diag]
, затем остальная часть строки, а затем ноль или более непустых строк.
Вариант шаблона
(?m)^([Unit].*)n([Diag].*(?:nh*S.*)*)
Посмотрите эту демонстрацию регулярных выражений.
Здесь (?m)^
сопоставляется с любым началом позиции строки и h*S.*
приводит ее в соответствие с непустыми строками ( h*
соответствует нулю или более горизонтальных пробелов и S
соответствует любому символу, не содержащему пробелов). Замените h
на [p{Zs}t]
или [^Srn]
, если не поддерживается.