Цель : извлечь первое письмо из цепочки писем
Описание : Основываясь на ручной проверке писем, я понял, что следующее письмо впоток электронной почты всегда начинается с набора From, Sent, To и Subject
Тестовый ввод :
Hello World from: the other side of the first email
from: this
sent: at
to: that
subject: what
second email
from: this
sent: at
to: that
subject: what
third email
from: this
date: at
to: that
subject: what
fourth email
Ожидаемый вывод :
Hello World from: the other side of the first email
Неудачные попытки :
После перерывов при наличии from:
в первом письме
(.*)((from:[\s\S]+?)(sent:[\s\S]+?)(to:[\s\S]+?)(subject:[\s\S]+))
Подписказавершается неудачно, когда есть повторяющиеся группы From, Sent, To и Subject
([\s\S]+)((from:(?:(?!from:)[\s\S])+?sent:(?:(?!sent:)[\s\S])+?to:(?:(?!to:)[\s\S])+?subject:(?:(?!subject:)[\s\S])+))
Вторая попытка работает с PCRE (PHP) , когда параметр ungreedy (флаг) выбран. Тем не менее, эта опция недоступна в Python, и я не мог найти способ заставить его работать.
Regex101 demo