Python inversa encontrar en cadena



Answers

Sentí curiosidad por cómo implementar buscando n veces la cadena desde el final por rpartition e hice este bucle en la nthpartition:

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)
Question

Tengo una cadena y un índice arbitrario en la cadena. Quiero encontrar la primera aparición de una subcadena antes del índice.

Un ejemplo: quiero encontrar el índice del segundo I utilizando el índice y 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 

Ahora esperaría que rfind () devuelva el índice del segundo I (16), pero devuelve 36. después de buscarlo en los documentos, descubrí que rfind no significa búsqueda inversa.

Soy totalmente nuevo en Python, ¿hay una solución integrada para encontrar a la inversa? ¿Como revertir la cadena con algo de magia python [:: - 1] y usar find, etc? ¿O tendré que revertir iterativa char por char a través de la cadena?




Links