RegEx - извлечение текста между фразами с помощью GROK

Я пытаюсь использовать RegEx для сбора информации между двумя «тегами». Пример: какой-то текст и еще немного текста Сообщение об ошибке: http 404 не найден Процедуры: какой-то текст какой-то текст

Мне нужно проанализировать все это поле, найти фразы «Сообщение об ошибке:» и «Процедуры:» и зафиксировать, что между ними, в данном случае «http 404 не найден». Мне нужно отображать только текст между тегами, и показывать теги необязательно.

Я пробовал много чего, используя RegEx и Grok, но мои попытки не увенчались успехом.

Кто-нибудь знает, как я могу это сделать?

Большое спасибо!


person Thiago Rabelo    schedule 05.02.2019    source источник


Ответы (2)


@capture = $text =~ m/(Error message:)(.*?)(Procedures:)/s;
$capture = join '', @capture;
$capture =~ s/<.*?>//g;

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

Надеюсь, что этот код не содержит ошибок, я его не компилировал, и надеюсь, что вы сможете найти ему альтернативы, если вы используете другой язык, отличный от perl 5.

person Martin Melichar    schedule 05.02.2019

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

(?<notImportant1>[A-Za-z ]* Error message:) (?<textBetweenTags>[A-Za-z0-9 ]*) (?<notImportant2>Procedures: [A-Za-z ]*)

Это даст вам что-то вроде:

  • notImportant1: немного текста и еще немного текста. Сообщение об ошибке:
  • textBetweenTags: http 404 не найден
  • notImportant2: процедуры: какой-то текст какой-то текст

Здесь вы извлекли как textBetweenTags интересующую вас подстроку. Помните, что если текст до или после тегов включает числа или другие символы, регулярное выражение должно измениться.

РЕДАКТИРОВАТЬ: Кстати, не знаю, знакомы ли вы с этим инструментом, но вы можете протестировать шаблон здесь.

person Drubio    schedule 11.02.2019