查找Python中所有出现的子字符串

问题:

Python具有string.find()string.rfind()以获取字符串中的子字符串的索引。
我不知道,也许有一些像string.find_all()这样的东西可以返回所有创立的索引(不仅从头开始还是从头到尾)?
例如:

string = "test test test test"

print string.find('test') # 0
print string.rfind('test') # 15

#that's the goal
print string.find_all('test') # [0,5,10,15]

回答:

没有简单的内置字符串函数可以做你想要的,但是你可以使用更强大的regular expressions

>>> import re
>>> [m.start() for m in re.finditer('test', 'test test test test')]
[0, 5, 10, 15]

如果要查找重叠的匹配项,lookahead将会这样做:

>>> [m.start() for m in re.finditer('(?=tt)', 'ttt')]
[0, 1]

如果你想要一个没有重叠的反向查找,你可以将正面和负面的前瞻结合到这样的表达式中:

>>> search = 'tt'
>>> [m.start() for m in re.finditer('(?=%s)(?!.{1,%d}%s)' % (search, len(search)-1, search), 'ttt')]
[1]

 re.finditer返回generator,所以您可以将上述[]更改为(),以获取生成器而不是列表,如果您只是迭代一次结果,这将更有效。

 
 Code问答: codewenda.com
Stackoverflow:Find all occurrences of a substring in Python

发表评论

电子邮件地址不会被公开。 必填项已用*标注

38 + = 42