Найти начальную и конечную позиции всех вхождений в строке в 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: список внутри индекса индекса вне диапазона
- Диапазон Matlab в Python
- В чем разница между функциями range и xrange в Python 2.X?
- Должен ли я кэшировать результаты диапазона, если я их повторно использую?
Вы можете использовать регулярные выражения ; объекты совпадения приходят с информацией о местоположении. Пример использования 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)]
Обратите внимание, что часто полезно иметь конечную точку индекса после последнего символа, а не до последнего символа, как вы просили (и приведенный выше код).