如何查找子字符串的所有出现?

581

Python有 string.find()string.rfind() 方法可以在字符串中寻找子字符串并返回它的索引。

我想知道是否有像 string.find_all() 这样的方法可以返回所有找到的索引(不仅仅是从开头开始或者从末尾开始的第一个)。

例如:

string = "test test test test"

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

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

如需计算字符串中子串出现的次数,请参阅计算字符串中子串的出现次数


20
'ttt'.find_all('tt')应该返回一个错误,因为在Python中字符串对象没有名为find_all()的方法。 - Santiago Alessandri
4
它应该返回'0'。当然,在完美的世界中也必须有'ttt'.rfind_all('tt'),它应该返回'1'。 - nukl
32个回答

-1
通过切片,我们可以找到所有可能的组合,并将它们附加到一个列表中,然后使用count函数找到它出现的次数。
s=input()
n=len(s)
l=[]
f=input()
print(s[0])
for i in range(0,n):
    for j in range(1,n+1):
        l.append(s[i:j])
if f in l:
    print(l.count(f))

s="test test test test"f="test"时,您的代码输出4,但OP期望得到[0,5,10,15] - barbsan
已经为一个单词编写了代码,将会更新它。 - BONTHA SREEVIDHYA

-3

这是答案 - Maxwell Chandler
14
字符串的 count() 方法返回给定字符串中子字符串出现的次数,而不是它们的位置。 - Astrid
7
这并不能满足所有情况,s='banana',sub='ana'。在这种情况下,'ana'出现了两次,但执行s.sub('ana')仅返回1。 - user4612771

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接