Python Reverse Find in String

У меня есть строка и произвольный индекс в строке. Я хочу найти первое вхождение подстроки перед индексом.

Пример: я хочу найти индекс 2-го я, используя индекс и str. rfind ()

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 и т. Д.? Или мне придется изменить итерацию char по символу через строку?

31
задан Ooker 30 August 2015 в 13:52
поделиться

2 ответа

Ваш вызов скажет rfind начать поиск в индексе 34. Вы хотите использовать перегрузку rfind , которая принимает строку, начало и конец.Скажите ему начать с начала строки ( 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
43
ответ дан 27 November 2019 в 22:29
поделиться

Мне стало любопытно, как реализовать поиск n раз для строки от конца к rpartition, и я выполнил этот 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
ответ дан 27 November 2019 в 22:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: