在Python中查找字符串中所有出现的开始和结束位置

时间:2011-12-10 19:55:31

标签: python string window position range

如果您有序列:

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 个答案:

答案 0 :(得分:6)

您可以使用regular expressions;匹配对象带有位置信息attached。使用Python 2的示例:

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

答案 1 :(得分:2)

re模块提供您所需的功能。

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

答案 2 :(得分:1)

列表理解表达了这一点:

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

请注意,在最后一个字符之后使结束索引点更为有用,而不是你要求的最后一个字符(和上面的代码提供)。