タイトルが示すように、次のような 2 つの文字列があります。
string = """
for i in x:
for y in z[i]:
print y
"""
s2 = "for"
私が取得したいものは次のとおりです。
[1, 17] # positions where "for" starts in string..
これには組み込み関数がありますか、それとも複数find
の s よりも良い方法ですか??
複数の検索を使用するか、正規表現とre.finditer()
次のいずれかを使用します。
[match.start() for match in re.finditer(re.escape(s2), string)]
re.finditer()
一致オブジェクトを生成し、ここでre.MatchObject.start()
メソッドを使用して、見つかった一致の開始インデックスを選択します。
動作が複数の呼び出しと同じであることを確認するために、正規表現のメタ文字が解釈されないようにしていましたre.escape()
。s2
str.find()
デモ:
>>> import re
>>> string = """
... for i in x:
... for y in z[i]:
... print y
... """
>>> s2 = "for"
>>> [match.start() for match in re.finditer(re.escape(s2), string)]
[1, 17]