Groovy Regex matcher ИЛИ - уникальные группы или дубликаты идентификаторов групп - PullRequest
0 голосов
/ 30 апреля 2019

Я хочу выполнить регулярное выражение поиска строки, представляющей файл журнала, найти несколько потенциальных сообщений об ошибках и распечатать результат.

Пример ввода (одна строка)

 ...
 Unable to parse YAML file: [mapping values are not allowed in this context] at line 1234\r\n
 worthless line\r\n
 KitchenInventory.cs(285,118): error CS2345: 'ButteryBread' does not contain a definition for 'DropOnFloor'\r\n
 another worthless line\r\n
 ...

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

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

  Error: Unable to parse YAML file
  Details: mapping values are not allowed in this context
  Line: 1234

  Error: CS2345
  Details: 'ButteryBread' does not contain a definition for 'DropOnFloor'
  Filename: KitchenInventory.cs
  Line: 285,118

(Обратите внимание, что имя файла пропущено для ошибки YAML, из-за ошибок YAML, не содержащих эту информацию.

Я обнаружил, что не могусделать логическое ИЛИ, чтобы создать массивную строку Regex, потому что есть повторяющиеся имена групп. Я попытался выполнить каждый поиск регулярных выражений индивидуально, но я получаю исключение при проверке на наличие поля:

def pattern = ~patternString
def matcher = pattern.matcher(lines)
while (matcher.find()) {
   if (matcher.group('filename')) {
      println "Filename: "+matcher.group('filename')
   }
   if (matcher.group('error')) {
       println "Error: "+matcher.group('error')
   }
   if (matcher.group('message')) {
       println "Message: "+matcher.group('message')
   }
}

Caught: java.lang.IllegalArgumentException: No group with name <errorCode>
java.lang.IllegalArgumentException: No group with name <errorCode>

Есть ли способ для меня, чтобы перебрать имена групп Groovy регулярных выражений, которые могут присутствовать, без исключения?идти по этому пути неправильно, и есть ли более легкий способ для меня достичь своей цели?

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