Я хочу регулярно искать строку, представляющую файл журнала, находить несколько потенциальных сообщений об ошибках и распечатывать результат.
Пример ввода (одна строка)
...
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, которые МОГУТ присутствовать, не вызывая исключений? В качестве альтернативы, я иду по этому пути неправильно, и есть ли более простой способ достичь своей цели?
someString.eachMatch( /some regex/ ){ doStuffWithMatches() }
- person injecteer   schedule 01.05.2019doStuffWithMatches()
инкапсуляции, в частности, как я могу проверить наличие имен групп регулярных выражений, не вызывая исключений. - person pghprogrammer4   schedule 01.05.2019