Найти начальную и конечную позиции всех вхождений в строке в Python

Если у вас есть последовательность:

example='abcdefabcdefabcdefg' 

и ваш поиск:

 searching_for='abc' 

какая функция даст вам список со всеми позициями?

 positions=[(0,2),(6-8),(12-14)] 

Я создал список окон, который разбивает «пример» на 3, поэтому он переходит от «abc», «bcd», «cde»,

 windows=['abc', 'bcd', 'cde', 'def', 'efa', 'fab', 'abc', 'bcd', 'cde', 'def', 'efa', 'fab', 'abc', 'bcd', 'cde', 'def'] 

и использовал цикл for

 for i in windows: if i == 'abc': 

вот где я застрял. , ,

Вы можете использовать регулярные выражения ; объекты совпадения приходят с информацией о местоположении. Пример использования Python 2:

 >>> import re >>> example = 'abcdefabcdefabcdefg' >>> for match in re.finditer('abc', example): print match.start(), match.end() 0 3 6 9 12 15 

Модуль re обеспечивает то, что вам нужно.

 import re print [(m.start(0), m.end(0)) for m in re.finditer('abc', 'abcdefabcdefabcdefg')] 

Это изящно выражается в понимании списка:

 positions = [(i, i + len(searching_for) - 1) for i in xrange(len(example)) if example[i:].startswith(searching_for)] 

Обратите внимание, что часто полезно иметь конечную точку индекса после последнего символа, а не до последнего символа, как вы просили (и приведенный выше код).