Опять же, старый поток, но вот мое решение с использованием генератора и простой str.find
.
def findall(p, s):
'''Yields all the positions of
the pattern p in the string s.'''
i = s.find(p)
while i != -1:
yield i
i = s.find(p, i+1)
x = 'banananassantana'
[(i, x[i:i+2]) for i in findall('na', x)]
возвращает
[(2, 'na'), (4, 'na'), (6, 'na'), (14, 'na')]