Найти начальную и конечную позиции всех вхождений в строке в Python - PullRequest
1 голос
/ 10 декабря 2011

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

example='abcdefabcdefabcdefg'

и ваш поиск:

searching_for='abc'

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

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

я создал список окон, который разделяет 'example' на 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':

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

Ответы [ 3 ]

6 голосов
/ 11 декабря 2011

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

>>> import re
>>> example = 'abcdefabcdefabcdefg'
>>> for match in re.finditer('abc', example):
        print match.start(), match.end()
0 3
6 9 
12 15
2 голосов
/ 11 декабря 2011

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

import re
print [(m.start(0), m.end(0)) for m in re.finditer('abc', 'abcdefabcdefabcdefg')]
1 голос
/ 11 декабря 2011

Это элегантно выражено пониманием списка:

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...