1. ホーム
  2. python

[解決済み] ある部分文字列のすべての出現箇所を見つけるにはどうすればよいですか?

2022-03-21 20:03:52

質問

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]

解決方法は?

探しているものを実現する単純な組み込みの文字列関数はありませんが、より強力な 正規表現 :

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 が返されます。 ジェネレータ を変更することができます。 [] に変更しました。 () を使用すると、リストではなくジェネレータを取得することができます。