Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Expresiones Regulares TC
Expresiones Regulares TC
FACULTAD DE CIENCIAS
2018
Expresiones Regulares
Definicion
Es una forma de reconocimiento y/o extracción de datos a partir de un patrón o texto formando
una cadena donde ciertos caracteres (metacaracteres - metacharacters) tiene un significado
especial. Esto es mas fácil de reconocer mediante un ejemplo que una definición. Usaremos el
lenguaje de programación Python en este informe, dado que es muy útil para poder ver y
aprovechar las utilidades de las expresiones regulares.
Ejemplo:
Este programa usa una expression regular, cuenta en cuantas lineas aparece la palabra
“hello”.
import re
regexp = re.compie(“hello”)
count = 0
if regexp.search(line):
count = count + 1
file.close()
print(count)
Output
>> 3
El número que nos resulta es ‘3’ pues hemos hecho que el código analiza si UNA LÍNEA
contiene la cadena ‘hello’. En caso hayan más de 1 coincidencia por línea, solo se contará
una vez.
Expresiones Regulares con caracteres especiales
Ejemplo
Por ejemplo | significa “ó”, asi la expresión regular selecciona la expresión “hello” o “Hello”.
● regexp = re.compile(“hello|Hello”)
Otra manera de hacer esto es, con un “paréntesis”. El “paréntesis” es un carácter especial para
agrupar expresiones, en este ejemplo puede tomar “h” o “H”.
● regexp = re.compile(“(h|H)ello”)
Otra manera de selección, seria con “[]” y tomar caracteres simples dentro de los corchetes.
Hay una buena manera de aprovechar esto, podemos asignar un rango de la forma “[a-z]”. Asi
para este ejemplo usamos “[hH]”.
● regexp = re.compile(“[hH]ello”)
En estos 3 casos, cada vez que Python al compilar lea “hello” o “Hello” lo reconocerá como el
mismo y el contador aumentará en uno.
Son secuencias de caracteres que tienen significados especiales como ‘\n’ o ‘\t’ contenidos en
líneas de un archivo de texto
Ejemplo
Incorrecto:
regexp = re.compile(“\\ten”)
regexp = re.compile(“\\\\ten”)
Correcto:
regexp = re.compile(r“\\ten”)
Ejemplo
(Verdadero)
(Falso)
En el segundo caso es falso ya que al existir el “r” avisa que se tomara un caracter con
funcionalidad especial que sera el \t de este modo no sera igual a “the” caso contrario
en el primer caso existe el r pero no presenta ningun caracter especial por lo tanto la
igualdad es verdadera
Un uso comun de las expresiones regulares es la de extraer datos a partir de patrones. Con un
ejemplo se puede ver mejor la aplicacion de este método.
Ejemplo
Solucion
Asumamos que el nombre, apodo y apellido consiste en letras y, posiblemente, guión;
y usaremos ‘[]’ para caracteres especiales para definir solo los del nombre:
[-a-zA-z]
Este patrón coincidirá con solo un guión, o una letra minúscula, o una letra mayúscula
Podríamos utilizar \d para hacer coincidir con cualquier dígito. Esto nos quedaría de la
siguiente forma:
\d\d\d-\d\d\d-\d\d\d\d
El problema es que no todos tendrán código de área. De modo que haremos uso de lo
ya aprendido
(\d\d\d-)?\d\d\d-\d\d\d\d
import re
regexp = re.compile(r“[-a-zA-Z]+,”
r“[-a-zA-Z]+”
r“( [-a-zA-Z]+)?”
r“: (\d\d\d-)?\d\d\d-\d\d\d\d”
)
file = open(“textfile”, ‘r’)
for line in file.readlines():
if regex.search(line):
print(“Match!”)
file.close()
Uso de patrones:
import re
regexp = re.compile(r“(?P<apodo>[-a-zA-Z]+),”
r“(?P<nombre>[-a-zA-Z]+)”
r“( (?P<apellido>[-a-zA-Z]+)))?”
r“: (?P<numeroDeTelefono>(\d\d\d-)?\d\d\d-\d\d\d\d)”
)
file = open(“textfile”, ‘r’)
for line in file.readlines():
result = regexp.search(line)
if result == None:
print(“Not record”)
else:
Apodo = result.group(‘apodo’)
Nombre = result.group(‘nombre’)
Apellido = result.group(‘apellido’)
if Apellido == None:
Apellido = “ ”
NumeroDeTelefono = result.group(‘numeroDeTelefono’)
print(‘Sujeto: ’, Nombre, Apellido, Apodo, ‘Numero: ’, NumeroDeTelefono)
file.close()
Podemos también usar el modulo de expresiones regulares de Python para encontrar cadenas
y reemplazarlos por otra cadena. El método usado es el sub.
Ejemplo
Reemplazaremos el “the the” por “the” de la siguiente manera:
>>> import re
>>> string = “If the the problem is textual, use the the re module”
>>> pattern = r“the the”
>>> regexp = re.compile(pattern)
>>> regexp.sub = (“the”, string)
Output:
Para mostrar lo útil que es Python con expresiones regulares, el primero argumento no
necesariamente tiene que ser una cadena, en vez de eso puede ser una función. Si es así,
entonces Python llamara a la función con su correspondiente objeto de expresiones regulares
(match_obj).
Ejemplo
Una aplicación a este método es cambiar el output de un entero a un número real (agregarle
.0).
>>> import re
>>> int_string = “1 2 3 4 5”
>>> def int_match_to_float(match_obj):
… return(match_obj.group(‘num’) + “.0”)
…
>>> pattern = r“(?P<num>[0-9]+)”
>>> regexp = re.compile(pattern)
>>> regexp.sub(int_match_to_float, int_string)
>>> print(regexp.sub(int_match_to_float, int_string))
“sub” retorna una nuva cadena. Finalmente vuelve a escanear justo después de donde
encontró la última expresión regular a reemplazar y vuelve hacerlo hasta que no encuentra
ninguna expresión regular más.