Используйте это регулярное выражение,
re.search("shantaram[\s\S]*?the", string)
вместо
re.search("shantaram[\s\S]*the", string)
Единственное отличие - «?». Используя «?» (Например, * ?, +?), Вы можете предотвратить самое длинное совпадение.
Я не уверен насчет c #, но мы можем сделать то же самое в C ++ или JAVA со структурой данных union-find. Это хорошо работает с оптимизацией Api реализации. Если можно легко найти то же самое в Google о union-find алгоритмической концепции для сетевых элементов. мы также можем реализовать со списком, деревом, а также с графиком с пользовательскими типами данных.
Спасибо, Рам