web-dev-qa-db-ja.com

Python文字列での逆検索

文字列と文字列への任意のインデックスがあります。インデックスの前に最初に出現するサブストリングを見つけたい。

例:インデックスとstr.rfind()を使用して2番目のIのインデックスを見つけたい

s = "Hello, I am 12! I like plankton but I don't like Baseball."
index = 34 #points to the 't' in 'but'
index_of_2nd_I = s.rfind('I', index)
#returns = 36 and not 16 

Rfind()は2番目のI(16)のインデックスを返すと予想しますが、36を返します。ドキュメントで調べた後、rfindは逆検索をサポートしていません。

私はPythonが初めてなので、逆検索する組み込みソリューションがありますか?python [::-1]マジックで文字列を逆にするようなものです。またはfindなどを使用しますか?または、文字列ごとに文字ごとにイテレートを逆にする必要がありますか?

30
user156027

呼び出しは、rfindに、インデックス34でstart lookingを指示します。文字列を受け取る rfind overload を使用したい、開始と終了。文字列の先頭から開始するように指示します(0)そしてindexを見ることを止めます:

>>> s = "Hello, I am 12! I like plankton but I don't like Baseball."
>>> index = 34 #points to the 't' in 'but'
>>> index_of_2nd_I = s.rfind('I', 0, index)
>>>
>>> index_of_2nd_I
16
42
Blair Conrad

私は、rpartitionによる文字列の末尾からn回の検索を実装する方法に興味を持ち、このn番目のrpartitionループを実行しました。

orig = s = "Hello, I am 12! I like plankton but I don't like Baseball."
found = tail = ''
nthlast = 2
lookfor = 'I'
for i in range(nthlast):
    tail = found+tail
    s,found,end = s.rpartition(lookfor)
    if not found:
        print "Only %i (less than %i) %r in \n%r" % (i, nthlast, lookfor, orig)
        break
    tail = end + tail
else:
    print(s,found,tail)
2