Это регулярное выражение работает для вашего конкретного примера:
r = re.search("(amartya)(?!.*amartya.*tagore)(.*)(tagore)", x)
r.group(2).strip()
По сути, оно говорит: сопоставьте шаблон, начинающийся с «amartya» и заканчивающийся «tagore», и все, что между ними не содержит слова «amartya "снова.
Вторая группа - (.*)
, которая соответствует чему-либо между" amartya "и" tagore "
Из документов ( re ):
(?!...)
Соответствует, если ...
не соответствует следующему.Это негативное предположение.Например, Isaac (?!Asimov)
будет соответствовать 'Isaac '
только в том случае, если за ним не следует 'Asimov'
.
Надеюсь, что это поможет.