Я в настоящее время синтаксического анализа лог-файл, который имеет следующую структуру:Regex - соответствие всего текста между двумя строками
1) штамп времени, которому предшествует символ # и последующий \ п
2) произвольной # о событиях, произошедших после этой временной отметки и все следуют \ п
3) повторить ..
Вот exmaple:
#100
04!
03!
02!
#1299
0L
0K
0J
0E
#1335
06!
0X#
0[#
b1010 Z$
b1x [$
...
Пожалуйста, простите, казалось бы, загадочные значения, они представляют собой кодировки, представляющие определенные «события».
Примечание: Коды событий могут также использовать символ #.
Что я пытаюсь сделать, это подсчитать количество событий, которые происходят в определенное время.
Другими словами, в момент 100 произошло 3 события.
Я пытаюсь совместить весь текст между двумя временными метками - и подсчитывать количество событий, просто подсчитывая количество строк новой строки, заключенных в согласованный текст.
Я использую регулярных выражений Python, и я использую следующее выражение:
pattern = re.compile('(#[0-9]{2,}.*)(?!#[0-9]+)')
Примечание: В {2}, потому что я хочу, метки времени, по крайней мере, двумя цифрами.
Я сопоставляю временную метку, продолжаю соответствовать любым другим символам, пока не нажму другую временную метку, - закончив сопоставление.
Что это возвращает это:
#100
#1299
#1335
Таким образом, я получаю метки времени - но ни один из данных событий - то, что я действительно волнует!
Я думаю, что причина в том, что негативный взгляд - «жадный», но я не совсем уверен.
Может быть совершенно другое регулярное выражение, которое делает это намного проще - открывайте любые предложения!
Любая помощь очень ценится!
-k
Не могли бы вы объяснить, почему эта версия работает в отличие от других? Благодаря! – kbarber
@kbarber Добавлено некоторое объяснение. –