在另一个字符串中多次查找字符串 - Python

l00*_*ake 2 python string python-3.x

我正在尝试查看字符串是否存在于另一个字符串中而不使用Python的预定义函数,例如find和index.

现在我的函数需要2个字符串作为参数,一个是我们要搜索的字符串,而另一个字符串是我们在第一个字符串中查找的字符串.

如果第一个字符串存在于第一个字符串中,我希望我的函数返回它在第一个字符串中出现的所有位置.

现在,我的函数能够找到第一个匹配项并返回一个索引,但是我希望找到多个匹配项而不是第一个匹配项.

以下是我的代码:

def multi_find (s, r):

    s_len = len(s)
    r_len = len(r)

    if s_len < r_len:
        n = -1
    else:
        m = s_len - r_len
        n = -1  # assume r is not yet found in s
        i = 0

        while n == -1 and i < m:
            # search for r in s until not enough characters are left
            if s[i:i + r_len] == r:
                n = i
            else:
                i = i + 1
    print (n)

multi_find("abcdefabc. asdli! ndsf acba saa abe?", "abc")
Run Code Online (Sandbox Code Playgroud)

现在,这将只输出"0",因为那里首先出现abc ..我怎样才能让它返回"0"和"6"(第二次出现的开始),基本上在找到它之后继续检查.

我想的是创建一个列表,列出它发生的所有地方,然后将我追加到那个列表,但是当我尝试这个时,没有什么对我有用.

Sim*_*ser 7

你可以做:

>>> haystack = "abcdefabc. asdli! ndsf acba saa abe?"
>>> needle = "abc"
>>> for i, _ in enumerate(haystack):
...     if haystack[i:i + len(needle)] == needle:
...         print (i)
...
0
6
Run Code Online (Sandbox Code Playgroud)