Python Reverse Найти в строке
У меня есть строка и произвольный индекс в строке. Я хочу найти первое вхождение подстроки перед индексом.
Пример: я хочу найти индекс 2-го I, используя индекс и 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-го я (16), но вернет 36. После поиска в документах я обнаружил, что rfind не поддерживает обратный поиск.
Я совершенно не знаком с Python, так есть ли встроенное решение для поиска? Как реверсирование строки с помощью некоторой магии python [:: - 1] и использования find и т.д.? Или мне придется перевернуть итерацию char на char через строку?
Ответы
Ответ 1
Ваш вызов говорит rfind, чтобы начать просмотр индекса 34. Вы хотите использовать 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
Ответ 2
Мне стало любопытно, как реализовать 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)