Python: compruebe si la cadena contiene una subcadena

Comprobar si una cadena contiene una subcadena ayuda a generalizar los condicionales y crear un código más flexible. Además, dependiendo de su modelo de dominio, verificar si una cadena contiene una subcadena también puede permitirle inferir campos de un objeto, si una cadena codifica un campo en sí misma.

En esta guía, veremos cómo comprobar si una cadena contiene una subcadena en Python.

La in Operador

La forma más sencilla de comprobar si una cadena de Python contiene una subcadena es utilizar el in operador.

La in El operador se utiliza para comprobar la pertenencia de las estructuras de datos a Python. Devuelve un booleano (ya sea True or False). Para comprobar si una cadena contiene una subcadena en Python usando el in operador, simplemente lo invocamos en la supercadena:

fullstring = "StackAbuse"
substring = "tack"

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

Este operador es una abreviatura de llamar a un objeto __contains__ método, y también funciona bien para comprobar si un elemento existe en una lista. Vale la pena señalar que es no seguro para nulos, entonces si nuestro fullstring estaba apuntando a None, se lanzaría una excepción:

TypeError: argument of type 'NoneType' is not iterable

Para evitar esto, primero querrás comprobar si apunta a None o no:

fullstring = None
substring = "tack"

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

La Cadena.index() Método

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

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

fullstring = "StackAbuse"
substring = "tack"

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

Este método es útil si también necesita conocer la posición de la subcadena, en lugar de solo su existencia dentro de la cadena completa. El método en sí devuelve el índice:

print(fullstring.index(substring))

Sin embargo, para comprobar si una cadena contiene una subcadena, este es un enfoque detallado.

El método String.find()

La clase String tiene otro método llamado find() que es más conveniente de usar que index(), principalmente porque no necesitamos preocuparnos por manejar ninguna excepción.

If 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:

Consulte nuestra guía práctica y práctica para aprender Git, con las mejores prácticas, los estándares aceptados por la industria y la hoja de trucos incluida. Deja de buscar en Google los comandos de Git y, de hecho, aprenden ella!

fullstring = "StackAbuse"
substring = "tack"

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

Naturalmente, realiza la misma búsqueda que index() y devuelve el índice del inicio de la subcadena dentro de la cadena principal:

print(fullstring.find(substring))

Expresiones regulares (RegEx)

Las expresiones regulares proporcionan una forma más flexible (aunque más compleja) de comprobar cadenas en busca de coincidencias de patrones. Con las expresiones regulares, puede realizar búsquedas flexibles y potentes a través de espacios de búsqueda mucho más grandes, en lugar de simples comprobaciones, como las anteriores.

Python se entrega con un módulo incorporado para expresiones regulares, llamado re. re El módulo contiene una función llamada search(), que podemos usar para hacer coincidir un patrón de subcadena:

from re import search

fullstring = "StackAbuse"
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, o si se trata de espacios de búsqueda grandes. De lo contrario, se deben evitar las complicaciones y la velocidad más lenta de las expresiones regulares para casos de uso de coincidencia de subcadenas simples.

Sobre la autora

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 aprende git a nivel de código.

Sello de tiempo:

Mas de Abuso de pila