Написано как функция, это должно служить вашей цели:
>>> def split_indices(s, sep):
... current = 0
... sep_len = len(sep)
... sections = s.lower().split(sep)
... for section in sections[:-1]: # skip trailing entry
... current += len(section)
... yield (current, current+sep_len)
... current += sep_len
Функция является генератором, поэтому, если вы хотите получить результат в виде списка, вам придется либо переписатьфункция для возврата списка или распаковки результата в список:
>>> b = 'Can you can a can as a canner can can a can?'
>>> [*split_indices(b, 'can')]
[(0, 3), (8, 11), (14, 17), (23, 26), (30, 33), (34, 37), (40, 43)]