Я хочу выполнить регулярное выражение поиска строки, представляющей файл журнала, найти несколько потенциальных сообщений об ошибках и распечатать результат.
Пример ввода (одна строка)
...
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 регулярных выражений, которые могут присутствовать, без исключения?идти по этому пути неправильно, и есть ли более легкий способ для меня достичь своей цели?