Python: compruebe si la cadena contiene una subcadena

En esta guía, veremos cómo verificar si una cadena contiene una subcadena en Python. Como de costumbre, cada enfoque que cubriremos tiene diferentes pros y contras. T...

En esta guía, veremos cómo comprobar si una cadena contiene una subcadena en Python. Como de costumbre, cada enfoque que cubriremos tiene diferentes ventajas y desventajas.

El operador in

La forma más fácil de verificar si una cadena de Python contiene una subcadena es usar el operador in.

El operador in se utiliza para comprobar la pertenencia a estructuras de datos en Python. Devuelve un valor booleano (ya sea ‘Verdadero’ o ‘Falso’). Para verificar si una cadena contiene una subcadena en Python usando el operador in, simplemente lo invocamos en la supercadena:

1
2
3
4
5
6
7
fullstring = "wikihtp"
substring = "tack"

if substring in fullstring:
    print("Found!")
else:
    print("Not found!")

Este operador es una abreviatura para llamar al método __contains__ de un objeto, y también funciona bien para verificar si un elemento existe en una lista. Vale la pena señalar que no es seguro contra nulos, por lo que si nuestra cadena completa apuntara a Ninguno, se lanzaría una excepción:

1
TypeError: argument of type 'NoneType' is not iterable

Para evitar esto, primero querrá verificar si apunta a Ninguno o no:

1
2
3
4
5
6
7
fullstring = None
substring = "tack"

if fullstring != None and substring in fullstring:
    print("Found!")
else:
    print("Not found!")

El método String.index()

El tipo String en Python tiene un método llamado index() que se puede usar para encontrar el índice inicial de la primera aparición de una subcadena en una cadena.

Si no se encuentra la subcadena, se lanza una excepción ValueError, que se puede manejar con un bloque try-except-else:

1
2
3
4
5
6
7
8
9
fullstring = "wikihtp"
substring = "tack"

try:
    fullstring.index(substring)
except ValueError:
    print("Not found!")
else:
    print("Found!")

Este método es útil si necesita conocer la posición de la subcadena, en lugar de solo su existencia dentro de la cadena completa.

El método String.find()

El tipo String tiene otro método llamado find que es más conveniente de usar que index(), porque no necesitamos preocuparnos por manejar excepciones.

Si find() no encuentra una coincidencia, devuelve -1, de lo contrario, devuelve el índice más a la izquierda de la subcadena en la cadena más grande.

1
2
3
4
5
6
7
fullstring = "wikihtp"
substring = "tack"

if fullstring.find(substring) != -1:
    print("Found!")
else:
    print("Not found!")

Si prefiere evitar la necesidad de detectar errores, entonces este método debe preferirse a index().

Expresiones regulares (RegEx)

Las expresiones regulares proporcionan una forma más flexible (aunque más compleja) de verificar las cadenas para la coincidencia de patrones. Python se envía con un módulo incorporado para expresiones regulares, llamado re. El módulo re contiene una función llamada search(), que podemos usar para hacer coincidir un patrón de subcadena:

1
2
3
4
5
6
7
8
9
from re import search

fullstring = "wikihtp"
substring = "tack"

if search(substring, fullstring):
    print "Found!"
else:
    print "Not found!"

Este método es mejor si necesita una función de coincidencia más compleja, como la coincidencia que no distingue entre mayúsculas y minúsculas. De lo contrario, la complicación y la velocidad más lenta de expresiones regulares deben evitarse para casos de uso de coincidencia de subcadenas simples.

Sobre el autor

Este artículo fue escrito por Jacob Stopak, un consultor y desarrollador de software apasionado por ayudar a otros a mejorar sus vidas a través del código. Jacob es el creador de Compromiso inicial, un sitio dedicado a ayudar a los desarrolladores curiosos a aprender cómo se codifican sus programas favoritos. Su proyecto destacado ayuda a las personas aprender git a nivel de código.

Licensed under CC BY-NC-SA 4.0