find()関数、複数の文字列を扱うには？


find関数により、任意の文字列の頭のインデックスが求められます。

[code]

    str1 = "abcdefghijklmn"
    print(str1.find('cde'))
    #2
    
[/code]

では、同様に、任意の文字列が複数ある場合は、どのようにしたら良いのでしょう。  
よろしく、お願いいたします。

[code]

    str2 = "abcdefabcdeghicde"
    # 2,8,14
    
[/code]




いろいろな方法がありますが、正規表現を使って行う方法があります。

正規表現(reモジュール)の`finditer`メソッドを使ってMatchオブジェクトのイテレータを取得し、Matchオブジェクトのstartメソッドの返り値を見ればよいです。

[re --- 正規表現操作 — Python 3.9.4
ドキュメント](https://docs.python.org/ja/3/library/re.html#re.finditer)

[code]

    import re
    str2 = "abcdefabcdeghicde"
    res_iter = re.finditer("cde", str2) 
    res_list = [] #結果を入れるリスト
    for res in res_iter:
        res_list.append(res.start())
    
    print(res_list)
    
[/code]




いろいろな方法がありますが、正規表現を使って行う方法があります。

正規表現(reモジュール)の`finditer`メソッドを使ってMatchオブジェクトのイテレータを取得し、Matchオブジェクトのstartメソッドの返り値を見ればよいです。

[re --- 正規表現操作 — Python 3.9.4
ドキュメント](https://docs.python.org/ja/3/library/re.html#re.finditer)

[code]

    import re
    str2 = "abcdefabcdeghicde"
    res_iter = re.finditer("cde", str2) 
    res_list = [] #結果を入れるリスト
    for res in res_iter:
        res_list.append(res.start())
    
    print(res_list)
    
[/code]

