Ваше регулярное выражение близко. Его проблема в том, что он «заканчивается» в начале следующего журнала, используя \d{5,6}
, чтобы отметить конец записи в журнале (и сопоставить его в процессе). Как упоминал Виктор, было бы более разумно использовать «новую версию» в качестве разделителя, поэтому я сделал это здесь.
found_matches = re.findall("(^\d{5,6}[\s\S]*?^new version: .*$)", log_file_content, re.MULTILINE)
Регулярное выражение (^\d{5,6}[\s\S]*?^new version: .*$)
ищет 5или 6 цифр в начале строки, а затем принимает любой символ (включая символы новой строки) вплоть до первого экземпляра new version:
, который появляется в начале строки. Затем он читает до конца строки, чтобы завершить эту группу. Так как вы собираетесь сопоставлять символы новой строки, обязательно запомните аргумент re.MULTILINE
!
Проверьте регулярное выражение здесь и полный код Python здесь .