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

7 投票
3 回答
14668 浏览
提问于 2025-04-17 08:07

如果你有一个序列:

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 i in windows:
    if i == 'abc':

但我在这里卡住了……

3 个回答

3

这段话用一种简洁的方式表达了一个概念:

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

需要注意的是,通常情况下,把结束位置设置在最后一个字符的后面会更有用,而不是正好指向最后一个字符。这一点和你之前问的有些不同(上面的代码就是这样做的)。

4

re模块提供了你所需要的功能。

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

你可以使用正则表达式,匹配的结果会带有位置信息附带。下面是一个使用Python 2的例子:

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

撰写回答