Вы можете адаптировать свой код следующим образом (вам нужно прочитать весь файл перед его синтаксическим анализом; если вы читаете построчно, как вы это делали в своем коде, ваше регулярное выражение будет только анализировать строку за другой и никогда не сможет выделить все SQL-запросы, разбитые на несколько строк):
import re
def parseFile(filepath):
line=[]
with open(filepath,'r') as log:
regex = re.compile(r'(\d{4}-\d{2}-\d{2})(.*?)(?=\d{4}-\d{2}-\d{2}|$)',re.MULTILINE|re.DOTALL)
lines = re.sub('\n|\s{2,}',' ',log.read())#.replace('\n', '')
date = regex.findall(lines)
if date == []:
print()
else:
print(date)
filepath = 'query.log'
parseFile(filepath)
выход:
[('2019-01-10', ' 10:33:21 +07 dvdrentalLOG: statement: SELECT last_update From public.actor '), ('2019-03-06', ' 14:07:06 +07 dvdrentalLOG: statement: SELECT film_id, title FROM public.film WHERE film_id = 1 ')]
Где регулярное выражение (с использованием положительного взгляда, чтобы ограничить число символов, совпадающих с .*?
) подробно описано здесь: https://regex101.com/r/nE0omm/1/
(\d{4}-\d{2}-\d{2})(.*?)(?=\d{4}-\d{2}-\d{2}|$)