0

タイトルが示すように、次のような 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 よりも良い方法ですか??

4

1 に答える 1

1

複数の検索を使用するか、正規表現とre.finditer()次のいずれかを使用します。

[match.start() for match in re.finditer(re.escape(s2), string)]

re.finditer()一致オブジェクトを生成し、ここでre.MatchObject.start()メソッドを使用して、見つかった一致の開始インデックスを選択します。

動作が複数の呼び出しと同じであることを確認するために、正規表現のメタ文字が解釈されないようにしていましたre.escape()s2str.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]
于 2013-05-13T10:42:37.397 に答える