Я начну с примера, так как это может быть самым простым объяснением. У нас есть многострочный файл:
...
STARTING LINE with something 83
...
STARTING LINE with other 12
...
ENDING LINE with yet another info
...
STARTING LINE with another 43
...
...
означает что угодно (несколько строк, включая пустые строки), кроме STARTING LINE .*
и ENDING LINE .*
.
Мы должны захватить группы, содержащие все STARTING LINE .*
, которые не , за которыми следует ENDING LINE .*
, что означает первое и последнее вхождение STARTING LINE .*
в примере.
Число вхождений одних пар STARTING LINE .*
и STARTING LINE .*...ENDING LINE .*
неизвестно.
Я пробовал несколько выражений с положительным и отрицательным, прямым и обратным прогнозом, но так и не смог правильно зафиксировать вхождения.
Я могу предоставить больше примеров, если это необходимо, но может быть трудно дать вам выражения, которые я уже пробовал, поскольку я не отслеживал их, а текущие фиксируют все вхождения, включая то, которое мы не отслеживаем хочу:
(^STARTING LINE .*?$)(?!^ENDING LINE)[.\n]+
(^STARTING LINE .*?$(?!.*^ENDING LINE)[.\n]*)
Обратите внимание, что мы хотим, чтобы в группе были только STARTING LINE .*
строк.
Мы используем Python 2.7 regex engine с re.MULTILINE
flags (gm
). Пробовал также с дополнительной опцией re.DOTALL
(s
), но безуспешно.