Package: pyrematch
REmatch - Python versionInterfaz desarrollada para hacer uso en python de la librería de expresiones regularesREmatchcreada en c++.Esta interfaz está adaptada para tener una sintaxis similar a la libreríaReencontrada por defecto en python, sin embargo, algunas funciones no tiene el mismo comportamiento por lo que se recomienda leer la documentación de forma detallada.Es importante mencionar que las expresiones regulares deben estar entre.*para ser compiladas, por ejemplo:.*correo@!dominio{gmail}.cl.*UsoPara usar esta interfaz primero se debe compilar el código de fuente de la carpetaREmatchEngineutilizando SWIG/Python (revisar el README en esa carpeta para las instrucciones de compilación).Suponiendo que ya se cuenta conrematch.pyy_rematchswiglib.so, se deben colocar esos archivos junto aREmatch.pyen la misma carpeta. Luego de eso, se puede importar la interfaz creando un archivo.pyy agregando:importpyrematchasreHistorial de versiones0.1Implementacion de las funciones:
- find
- findall
- finditer
- search
- match
- fullmatchContenido del moduloREmatch.compile(pattern, flags)Compila una expresion regular en unRegex object, el cual puede ser usado para hacer match con los metodos que se describirán a continuacion.Regular Expression ObjectRegex.find(string)Escanea el string de izquierda a derecha hasta encontrar la primera posición donde la expresion regular produzca match, retornando el correspondienteMatch object. RetornaNonesi no se logra hacer match con el string.>>pattern=re.compile('.*d.*')>>pattern.find('dog')# Match at index 0<REmatch.Matchobjectat0x7f374c2e2bd0>Regex.search(string)Mismo comportamiento defind. Creado para mantener sintaxis con libreriaRe.Regex.match(string)Si cero o mas caracteres desde la primera posicion del string hacen match con la expresion regular, retorna el correspondientematch object. RetornaNonesi no se hace match con el inicio del string.>>pattern=re.compile('!x{.*a...s}.*')>>pattern.match('abyssal')# Match at index 0<REmatch.Matchobjectat0x7fa1080fd7f0>>>pattern.match('abyssal').group("x")abyssRegex.fullmatch(string)Si la expresion regular es capaz de hacer match con todo el string, retorna el correspondientematch object. RetornaNoneen caso contrario.>>pattern=re.compile('.*!x{a...s}.*')>>pattern.fullmatch('abyssal')None>>pattern.fullmatch('abyss')<REmatch.Matchobjectat0x7fa1080fd7f0>>>pattern.fullmatch('abyss).group("x")abyssRegex.findall(string)Escanea el string de iquierda a derecha encontrando todos los substring que produzcan match con la expresion regular. Retorna una lista dematch objecten el orden en que fueron encontrados. En caso de no producir ningun match retorna una lista vacia.>>pattern=re.compile('.*!x{teen}.*')>>matches=pattern.findall('fifteen, sixteen, seventeen,...')[<REmatch.Matchobjectat0x7f163ba14b10>,<REmatch.Matchobjectat0x7f163ba1e150>,<REmatch.Matchobjectat0x7f163ba2abd0>]>>>>formatchinmatches:>>print(match.span('x'),match.group('x'))(3,7)teen(12,16)teen(23,27)teenRegex.finditer(string)Mismo comportamiento defindall. Retorna uniteratordematch objectsen el orden que fueron encontrados. En caso de no producir ningun match retorna un iterador vacio.>>pattern=re.compile('.*!x{teen}.*')>>matches=pattern.finditer('fifteen, sixteen, seventeen,...')<generatorobjectRegex.finditerat0x7f08c46d3850>>>>>formatchinmatches:>>print(match.span('x'),match.group('x'))(3,7)teen(12,16)teen(23,27)teenMatch ObjectsNotar que para todas las funcionalidades de losmatch objectses necesario hacer uso de loscapture.Elcapture(especificado previamente en la compilación de la expresion regular) puede ser el nombre en formato de string o el indice (partiendo en 1) en formato de integer. La sintaxis para un capture es!capture_name{regular_expression}.Match.start(capture) / end(capture)Retorna el indice del inicio/termino del substring que ha hecho match especificamente con elcaptureindicado en la expresion regular.>>pattern=re.compile('.*!var{stick}.*')>>match=pattern.find("fantastick")>>match.start('var')5>>match.end('var')10Match.span(capture)Para un matchmretorna la tupla(m.start(capture), m.end(capture)).>>pattern=re.compile('.*!var{stick}.*')>>match=pattern.find("fantastick")>>match.span('var')(5,10)Match.group(capture)Retorna el substring asociado alcapture. Notar que si la flagsave_anchorsestá activada, estará disponiblematch.group(0)que retornará el string completo con el cual se ha hecho match.>>pattern=re.compile('.*!var1{fan}..!var2{stick}.*')>>match=pattern.find("fantastick")>>match.group('var1')fan>>match.group(1)fan>>match.group('var2')stick>>match.group(2)stickMatch.groups(default=None)Retorna una tupla de strings que contiene todos los grupos del match.>>pattern=re.compile('.*!var1{fan}..!var2{stick}.*')>>match=pattern.find("fantastick")>>match.groups()('fan','stick')Match.groupdict(default=None)Retorna un diccionario de todos los grupos en el match. Cada elemento tiene como key el nombre del grupo y value el string correspondiente al grupo.>>pattern=rem.compile(".*!name{.*}, !city{.*}.*")>>matches=pattern.findall("Erick, Santiago")>>name_length=0>>city_length=0>>complete_match=None>>forminmatches:>>iflen(m.group("name"))>name_lengthandlen(m.group('city'))>city_length:>>complete_match=m>>complete_match.groupdict(){'city':'Santiago','name':'Erick'}En este ultimo ejemplo es importante notar que findall retorna todas las combinaciones posibles de las letras en las palabras que se buscan, por lo que se recorren todos los resultados hasta encontrar las de mayor largo que corresponderían al nombre completo que no interesa saber.Ejemplos de usoEjemplos mas complejos una vez que esté lista la libreria...Proximamente...
Codigo
Codigo
Codigo
CodigoContactoOscar Cárcamooscar.carcamoz@uc.clNicolás Van Sint Jannicovsj@uc.cl