Cómo encontrar el índice de una palabra exacta en una cadena en Python

word = 'laugh' string = 'This is laughing laugh' index = string.find ( word ) 

El índice es 8, debería ser 17. Miré a mi alrededor con fuerza, pero no pude encontrar una respuesta.

Debe usar expresiones regulares (con límite de palabra) como str.find devuelve la primera aparición. Luego use el atributo de start del objeto de match para obtener el índice de inicio.

 import re string = 'This is laughing laugh' a = re.search(r'\b(laugh)\b', string) print(a.start()) >> 17 

Puedes encontrar más información sobre cómo funciona aquí .

prueba esto:

 word = 'laugh' string = 'This is laughing laugh'.split(" ") index = string.index(word) 

Esto hace una lista que contiene todas las palabras y luego busca la palabra relevante. Entonces supongo que podría agregar todas las longitudes de los elementos en la lista menos que el índice y encontrar su índice de esa manera

 position = 0 for i,word in enumerate(string): position += (1 + len(word)) if i>=index: break print position 

Espero que esto ayude.

Aquí hay un enfoque sin expresiones regulares:

 word = 'laugh' string = 'This is laughing laugh' # we want to find this >>> ----- # index 0123456789012345678901 words = string.split(' ') word_index = words.index(word) index = sum(len(x) + 1 for i, x in enumerate(words) if i < word_index) => 17 

Esto divide la cadena en palabras, encuentra el índice de la palabra coincidente y luego resume las longitudes y el carácter en blanco como un separador de todas las palabras anteriores.

Actualización Otro enfoque es el siguiente de una sola línea:

 index = string.center(len(string) + 2, ' ').find(word.center(len(word) + 2, ' ')) 

Aquí, tanto la string como la word se rellenan a la derecha y a la izquierda con espacios en blanco para capturar la palabra completa en cualquier posición de la cadena.

Por supuesto, debe utilizar expresiones regulares para el rendimiento y la comodidad. El equivalente al uso del módulo re es el siguiente:

 r = re.compile(r'\b%s\b' % word, re.I) m = r.search(string) index = m.start() 

Aquí \b significa límite de palabra , consulte la documentación correspondiente. Regex puede ser bastante desalentador. Una excelente manera de probar y encontrar expresiones regulares es usando regex101.com

Las cadenas en el código no están separadas por espacios. Si desea encontrar el espacio, debe incluir el espacio en la palabra que está buscando. Puede encontrar que en realidad sería más eficiente dividir la cadena en palabras y luego iterar, por ejemplo:

 str = "This is a laughing laugh" strList = str.split(" ") for sWord in strList: if sWord == "laugh": DoStuff() 

A medida que recorra, puede agregar la longitud de la palabra actual a un índice y, cuando encuentre la palabra, salga del bucle. ¡No olvides dar cuenta de los espacios!