在Python中查找字符串中所有出现的起始和结束位置
如果你有一个序列:
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')]