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]
発生回数のカウントについては、文字列内の部分文字列の出現回数を数える。
ベストアンサー1
あなたが探している機能を実行する単純な組み込み文字列関数はありませんが、より強力な正規表現:
import re
[m.start() for m in re.finditer('test', 'test test test test')]
#[0, 5, 10, 15]
重複する一致を見つけたい場合は、先のことを考えるそれは次のようになります:
[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
を返す発生器したがって、[]
上記の を に変更して()
、リストではなくジェネレーターを取得することができます。これにより、結果を 1 回だけ反復処理する場合は、より効率的になります。