мой код анализирует некоторые строки в файле журнала.
я делаю много вещей с этим, но возникла особая потребность найти строку, которая не содержит определенной подстроки. при определенном условии
я довольно хорошо разбираюсь в регулярных выражениях. но я не могу понять это.
проблема: я хочу захватить любую строку, которая не содержит слова error
или warn
. если только это не первая часть записи журнала, заключенная в квадратные скобки.
до сих пор я пробовал что-то вроде этого:
(((?:abc|cba)\s+.*(?!\[?(?!error|warn)\]?).*)|((abc|cba)\s+\[(error|warn)\]\s+(.*)))
строки в журнале могут выглядеть как некоторые из этих примеров:
группа захвата 2:
abc [error] message
cba [error] message
cba [warn] message
группа захвата 1:
abc something random
cba i dont know
не захватывать:
abc some [error] message
cba some [warn] message
задача на более простом английском языке; Я хочу получить любую строку, начинающуюся с abc
или cba
. группа захвата 1 должна захватить строку, если в ней нет [error]
или [warn]
. и группа захвата 2 должна получить его, только если [error]
или [warn]
являются первой частью записи (после abc
или cba
)