Python
Tipos de datos básicos
string
find

PBuscar subcadena en Python: indice, count, función find() index(), regex, all, carácter, palabra

En este post, hemos recopilado algunas de las preguntas más frecuentes sobre cómo encontrar o buscar cadenas en Python.

1. Encontrar una cadena específica usando la función find()

Una de las funciones más básicas usadas para encontrar una cadena en Python es la función find(). Esta función encuentra una cadena dada en una cadena y devuelve su posición. Si la cadena no existe, devuelve -1.

s = "Hello, Python!"
 
print(s.find("Python")) # Output: 7

En el ejemplo anterior, puedes encontrar dónde empieza la cadena "Python" en "¡Hola, Python!". En este caso, se devuelve 7, lo que significa que la cadena "Python" comienza en el índice 7.

Por defecto, la función find() devuelve el valor del índice de la primera aparición de la cadena buscada. Para buscar varias cadenas, véase Sección 4.

La función también puede tomar opcionalmente dos argumentos más: índice inicial e índice final, que se pueden utilizar de la siguiente manera, respectivamente.

s = "Hello, Python! Python is great."
 
print(s.find("Python")) # Output: 7
print(s.find("Python", 10)) # Output: 15
print(s.find("Python", 0, 15)) # Output: 7

En el ejemplo anterior, la segunda sentencia print muestra el comportamiento de la función find() cuando recibe el índice inicial. Como comienza en el índice 10, es equivalente a encontrar una posición en la cadena s[10:], o "hon! Python is great.".

De forma similar, la tercera sentencia print del ejemplo se toma hasta el índice final y equivale a encontrar la posición en una subcadena cortada por s[0:15].

Si quieres encontrar el último índice de una cadena concreta, puedes utilizar la función rfind(), que funciona según el mismo principio. Esta función busca desde el final de la cadena, por lo que encontrará el último índice en el que aparece una cadena determinada. Tenga en cuenta que también hay una función rindex correspondiente, que discutiremos en la Sección 2.

1.1. Búsqueda insensible a mayúsculas y minúsculas

Como vimos en el post Comparación de cadenas en Python, el método __eq__() de la clase Python String es sensible a mayúsculas y minúsculas porque compara valores de código Unicode. Si quieres usar la función find() para encontrar la posición de una cadena sin distinguir mayúsculas de minúsculas, debes usar los métodos upper() o lower().

En el siguiente código, he convertido tanto la cadena encontrada como la cadena encontrada a minúsculas para la búsqueda insensible a mayúsculas/minúsculas.

s = "Hello, Python!"
s.lower().find("python".lower()) # Output: 7

2. Diferencia entre las funciones find() e index()

La función find() y la función index() son dos métodos utilizados para encontrar una subcadena específica dentro de una cadena. Si la búsqueda tiene éxito, no verás ninguna diferencia entre los dos métodos. Sin embargo, si la búsqueda falla, la diferencia entre los dos métodos se hace evidente.

Si la cadena buscada no existe en el destino de la búsqueda, la función find() devolverá el valor -1 y no lanzará ninguna excepción. Sin embargo, en la misma situación, la función index() lanzará una excepción ValueError.

>>> s = "Hello, Python!"
>>> s.index("python")
Traceback (most recent call last):
File "", line 1, in
ValueError: substring not found

Por lo tanto, es importante elegir y utilizar el apropiado de los dos métodos dependiendo de lo que quieras hacer cuando no puedes encontrar una cadena Python.

3. Encontrar un número específico de cadenas

El método que usamos para encontrar un número específico de cadenas en Python es count(). Este método devuelve un recuento de cuántas veces una determinada subcadena aparece en la cadena objetivo. Opcionalmente, al igual que los métodos find() e index(), también se puede especificar un índice para iniciar y finalizar la búsqueda.

El uso básico es

s = "Hello, Python! Python is great."
 
print(s.count("Python")) # Output: 2
print(s.count("Python", 2, 14)) # Output: 1

La primera sentencia print del código anterior imprime el número de apariciones de la cadena "Python". En este caso devuelve 2.

La segunda sentencia print toma el índice inicial, el índice final, y devuelve un valor diferente basado en eso.

Como puedes ver, el método count() es útil para determinar rápidamente la frecuencia de aparición de una subcadena en particular dentro de una cadena, y se puede utilizar en una variedad de situaciones en las que se requiere el análisis de cadenas.

4. Encontrar todas las ocurrencias de una cadena

Hay tres formas principales de encontrar todas las apariciones de una cadena en Python. La primera es usando la función find(), y las otras dos usando el módulo de expresiones regulares re.

4.1. Encontrar múltiples cadenas usando la función find()

Como se mencionó en la Sección 1, la función find() de Python sólo devuelve el índice de la primera ocurrencia de una subcadena. Por lo tanto, debe usarse junto con un bucle para encontrar la ubicación de múltiples cadenas.

Hay muchas maneras diferentes de implementar esto, pero aquí veremos el código de implementación más simple.

s = "Hello, Python! Python is great."
 
start = 0
while start != -1:
    start = s.find("Python", start)
    if start != -1:
        print(start)
        start += 1

El código anterior obtiene múltiples localizaciones de cadenas utilizando el índice de inicio que la función find() toma como argumento y el valor -1 que devuelve si la búsqueda falla.

4.2. Obtención de múltiples localizaciones de cadenas con la función re.finditer()

El módulo re de Python es una biblioteca que te ayuda a aprovechar las potentes expresiones regulares con patrones y métodos intuitivos.

Entre las funciones del módulo re, la función finditer() devuelve una lista iterable de todos los objetos coincidentes con un patrón dado. Esto puede ser útil cuando se buscan múltiples posiciones de cadena porque estos objetos coincidentes contienen índices de posición. El índice de posición se obtiene utilizando el método .start() del objeto coincidente.

A continuación se explica cómo utilizarlo

import re
 
s = "Hello, Python! Python is great."
matches = re.finditer("Python", s)
indices = [match.start() for match in matches]
 
print(indices) # 출력: [7, 15]

Puede utilizarlo de varias maneras, por ejemplo con comprensiones de listas, como se muestra arriba.

5. Conclusión

En este artículo, hemos cubierto cuatro formas diferentes de encontrar cadenas en Python. Con el fuerte soporte de Python para la manipulación de cadenas, hemos sido capaces de buscar subcadenas de varias maneras. Espero que hayas encontrado este artículo útil en tus proyectos del mundo real.

copyright for Python string find

© 2023 All rights reserved.