Expresiones regulares

En Pyton existe una libreria llamada RE la cual contiene una gran cantidad de expresiones muy útiles que permiten hacer las búsquedas de texto mas comunes en la programación. Veamos un ejemplo de búsqueda de cadena de texto:

import os
import re

os.system('cls')

sCadena = 'Cadena de texto que contiene el texto a buscar'
sCadenaBusqueda ='buscar'

print(re.search(sCadenaBusqueda,sCadena))

Resultado:

<re.Match object; span=(40, 46), match='buscar'>

Como podemos comprobar a través del código se ha usado la función SEARCH() perteneciente al módulo RE, dicha función admite como primer parámetro la cadena que se desea buscar y como segundo parámetro la cadena en donde se debe buscar. El resultado de imprimir dicha función devuelve un objeto del tipo Match indicando la posición en la cadena en donde se inicia y termina la cadena soicitada. Veamos que sucede si se ejecuta la función MATCH() pasando como parámetro de búsqueda una cadena que no esta en la cadena a registrar.

import os
import re

os.system('cls')

sCadena = 'Cadena de texto que contiene el texto a buscar'
sCadenaBusqueda ='cadena inexistente'

print(re.search(sCadenaBusqueda,sCadena))

Resultado:

None

La función SEARCH() devuelve un objeto None (lo que es lo mismo que NULL) cuando no ha encontrado la cadena solicitada dentro de la cadena de búsqueda. Con lo cual este sería otra aproximación al mismo ejercicio:

os.system('cls')

sCadena = 'Cadena de texto que contiene el texto a buscar'
sCadenaBusqueda ='cadena inexistente'

if re.search(sCadenaBusqueda,sCadena)==None:
    print(f'"{sCadenaBusqueda}"  no se encuentra dentro de la cadena "{sCadena}"')

Resultado:

"cadena inexistente"  no se encuentra dentro de la cadena "Cadena de texto que contiene el texto a buscar"

Método START() y método END()

El método START() devuelve la posición en donde se encuentra la cadena buscada dentro de la cadena a buscar, veamos el siguiente ejemplo:

import os
import re

os.system('cls')

sCadena = 'Cadena de texto que contiene el texto a buscar'
sCadenaBusqueda ='contiene'

if re.search(sCadenaBusqueda,sCadena)==None:
    print(f'"{sCadenaBusqueda}" no se encuentra dentro de la cadena "{sCadena}"')
else:
    print(f'"{sCadenaBusqueda}" se encuentra dentro de la cadena "{sCadena}"\n')
    sCadenaSearch=re.search(sCadenaBusqueda,sCadena)
    print(f'''La cadena "{sCadenaBusqueda}" empieza en la posición {sCadenaSearch.start()} y termina en la
posición {sCadenaSearch.end()} dentro de la cadena: "{sCadena}"''')

Resultado:

"contiene" se encuentra dentro de la cadena "Cadena de texto que contiene el texto a buscar"


La cadena "contiene" empieza en la posición 20 y termina en la

posición 28 dentro de la cadena: "Cadena de texto que contiene el texto a buscar"


Como podemos ver en el uso del método .START() efectivamente retorna la posición de a cadena buscada dentro de la cadena que a contiene. Esto se logra asignando a una variable el objeto que devuelve el método .SEARCH() y ejecutando sobré él el método .START(), el cual devuelte la posición requerida. De igual manera el método END() devuelve la posicióin donde termina la cadena requerida. 



Método SPAN()

El método SPAN() cumple 2 funciones, en una, ya que devuelte una tupla con los valores de inicio y de fin de la cadela solicitada dentro de la cadena contenedora. Veamos el siguiente ejemplo:


import os
import re

os.system('cls')

sCadenaContenedora = 'Esta cadena contiene el texto a buscar ... clave:2350'
sCadenaBuscar='clave:'
sTextoEncontrado=re.search(sCadenaBuscar,sCadenaContenedora)
if not re.search(sCadenaBuscar,sCadenaContenedora) == None:
    print(f'''
La cadena "{sCadenaBuscar}" se encuentra entre los caracteres {sTextoEncontrado.span()}
''')
else:
    print('La cadena solicitada no esta en la contenedora')

Resultado:


La cadena "clave:" se encuentra entre los caracteres (43, 49)


Como podemos comprobar por el resultado, el método SPAN() ha devuelto la tupla con los valores de posición de los caracteres donde se inicia y termina la cadena solicitada, en este caso la cadena 'clave:'.

Método FINDALL()

El método FINDALL() acepta como argumentos una cadena que servirá como patrón de búsqueda dentro de una segunda cadena, devolviendo una lista que contiene todas las ocurrencias de la cadena que se busca dentro de la cadena que la contiene. Si aplicamos el método LEN() obtendremos el número de veces que se repite dicha cadena. Veamos el siguiente ejemplo:

import os
import re

os.system('cls')
sCadenaContenedora = "Esta es la cadena que contiene todos los elementos \
de cadena en donde se desea buscar."
sCadenaBusqueda = "cadena"
print(re.findall(sCadenaBusqueda,sCadenaContenedora))
print(f'La palabra "{sCadenaBusqueda}" se repite \
{len(re.findall(sCadenaBusqueda,sCadenaContenedora))} veces')

Resultado:

['cadena', 'cadena']

La palabra "cadena" se repite 2 veces

Como podemos comprobar el método FINDALL() ha devuelto una lista con las cadena buscada tantas veces como se encontraba en la cadena matriz. Aplicando el método LEN() hemos obtenido el valor entero que representa la cantidad de elementos de esta lista o lo que es lo mismo el número de veces que se repite.

Metacaracteres



Comentarios

Entradas populares