Как отфильтровать деталь с помощью RegExp - PullRequest
1 голос
/ 23 марта 2020

Я хочу получить все blo c, которые начинаются с "-", а не начинаются с "- ERROR" и "- FAILED"

Вот мое регулярное выражение:

^- .*(?:\r?\n(?!- ).*)*

Демонстрация на Regex101

Ответы [ 2 ]

1 голос
/ 23 марта 2020

Вы можете использовать отрицательный прогноз для первого утверждения, совпадающего с ERROR или FAILED, и сопоставлять все следующие строки, которые не начинаются с -, и пробел для получения отдельных блоков:

^- (?!ERROR|FAILED).*(?:\r?\n(?!- ).*)*

Теперь шаблон будет соответствовать:

  • ^ Начало строки
  • - Соответствие - и пробел
  • (?!ERROR|FAILED).* Утверждение того, что непосредственно справа не ERROR или FAILED
  • (?: Группа без захвата
    • \r?\n(?!- ).* Совпадение с новой строки, утверждение не - и пробел в начале и совпадение с любым символом 0+ раз
  • )* Закрыть группу и повторить 0+ раз

Regex demo

1 голос
/ 23 марта 2020

Кажется, что работает следующий шаблон, по крайней мере, с помощью демонстрационного инструмента:

- TEST\b.*?(?=- (?:ERROR|TEST|FAILED)|$)

Демо

Шаблон говорит :

- TEST\b                       match "- TEST" followed by a word boundary
.*?                            then match all content up until looking ahead and seeing
(?=- (?:ERROR|TEST|FAILED)|$)  the start of another block with ERROR, TEST, or FAILED

Обратите внимание, что я использую режим точка-все, а также я отключил привязки ^ и $, так что они означают начало и конец всего ввода (а не каждая строка).

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