Python выполняет поиск всех многострочных блоков в текстеPython

Программы на Python
Anonymous
Python выполняет поиск всех многострочных блоков в тексте

Сообщение Anonymous »

У меня есть текст с SQL-запросами, из которого я хочу извлечь все блоки SELECT:

Код: Выделить всё

sql_que = """
select p.value_n, p.enabled from proper p;

select p.value_n, p.enabled
from proper p
where p.property_name = 'PROP1';

(select p.value_n, p.enabled
from proper p
where p.property_name = 'PROP1'
union all
select p.value_n, p.enabled
from proper p
where p.property_name = 'PROP2'
)"""
Используя следующее регулярное выражение:

Код: Выделить всё

import re
res = re.findall('\(?select.*\n.*\n.*\n.*[;\)]', sql_que2)
Я нашел этот запрос из 4 строк:

Код: Выделить всё

"select p.value_n, p.enabled
from proper p
where p.property_name = 'PROP2'
)"
Но это регулярное выражение работает только для 4-строчных запросов.
И когда я хочу улучшить запрос, чтобы он работал не только для 4-строчных запросов:

Код: Выделить всё

res = re.findall('\(?select.*(\n.*)*[;\)]', sql_que2)
тогда ничего не возвращается.
Как можно изменить запрос в этом случае? И возможно ли это вообще?

Вернуться в «Python»