import re
text = 'Here is text : My text is so interesting, depending "interesting" meaning of course.'
s = text
while True:
m = re.search(r'(?:.*?)i(nterest\w{2})(\w)(?:(?<!i\1)(?!=\2).)*', s)
if not m:
break
print(m[0])
s = s[m.span(1)[0]:]
Отпечатки:
Here is text : My text is so interesting, depending "interestin
nteresting, depending "interesting" meaning of course.
Демо
(?:.*?)i(nterest\w{2})(\w)(?:(?<!i\1)(?!=\2).)*
Строка, которую мы ищем, разбивается на куски:
- 'i' соответствует i
(nterest\w{2})
Группа захвата 1 -> interest
плюс первые два символа слова нашего совпадения. (\w)
Группа захвата 2 -> третий и последний символ нашего совпадения.
Затем мы сканируем один символ за раз, если предыдущие символы не i
плюс группа захвата 1 и следующий символ не является группой захвата 2 :
(?:(?<!i\1)(?!=\2).)*
Затем мы используем местоположение группы захвата 1, чтобы определить, где должно начаться следующее сканирование.