Skip to main content

An information extraction focused regex library that uses constant-delay algorithms.

Project description

REmatch - Python version

Interfaz desarrollada para hacer uso en python de la librería de expresiones regulares REmatch creada en c++.

Esta interfaz está adaptada para tener una sintaxis similar a la librería Re encontrada 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.*

Uso

Para usar esta interfaz primero se debe compilar el código de fuente de la carpeta REmatchEngine utilizando SWIG/Python (revisar el README en esa carpeta para las instrucciones de compilación).

Suponiendo que ya se cuenta con rematch.py y _rematchswiglib.so, se deben colocar esos archivos junto a REmatch.py en la misma carpeta. Luego de eso, se puede importar la interfaz creando un archivo .py y agregando:

import pyrematch as re

Historial de versiones

0.1

Implementacion de las funciones:
- find
- findall
- finditer
- search
- match
- fullmatch

Contenido del modulo

REmatch. compile(pattern, flags)

Compila una expresion regular en un Regex object, el cual puede ser usado para hacer match con los metodos que se describirán a continuacion.

Regular Expression Object

Regex. find(string)

Escanea el string de izquierda a derecha hasta encontrar la primera posición donde la expresion regular produzca match, retornando el correspondiente Match object. Retorna None si no se logra hacer match con el string.

>> pattern = re.compile('.*d.*')
>> pattern.find('dog') # Match at index 0
<REmatch.Match object at 0x7f374c2e2bd0>

Regex. search(string)

Mismo comportamiento de find. Creado para mantener sintaxis con libreria Re.

Regex. match(string)

Si cero o mas caracteres desde la primera posicion del string hacen match con la expresion regular, retorna el correspondiente match object. Retorna None si no se hace match con el inicio del string.

>> pattern = re.compile('!x{.*a...s}.*')
>> pattern.match('abyssal') # Match at index 0
<REmatch.Match object at 0x7fa1080fd7f0>
>> pattern.match('abyssal').group("x")
abyss

Regex. fullmatch(string)

Si la expresion regular es capaz de hacer match con todo el string, retorna el correspondiente match object. Retorna None en caso contrario.

>> pattern = re.compile('.*!x{a...s}.*')
>> pattern.fullmatch('abyssal')
None
>> pattern.fullmatch('abyss')
<REmatch.Match object at 0x7fa1080fd7f0>
>> pattern.fullmatch('abyss).group("x")
abyss

Regex. findall(string)

Escanea el string de iquierda a derecha encontrando todos los substring que produzcan match con la expresion regular. Retorna una lista de match object en 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.Match object at 0x7f163ba14b10>, <REmatch.Match object at 0x7f163ba1e150>, <REmatch.Match object at 0x7f163ba2abd0>]
>>
>> for match in matches:
>>     print(match.span('x'), match.group('x'))
(3, 7) teen
(12, 16) teen
(23, 27) teen

Regex. finditer(string)

Mismo comportamiento de findall. Retorna un iterator de match objects en 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,...')
<generator object Regex.finditer at 0x7f08c46d3850>
>>
>> for match in matches:
>>     print(match.span('x'), match.group('x'))
(3, 7) teen
(12, 16) teen
(23, 27) teen

Match Objects

Notar que para todas las funcionalidades de los match objects es necesario hacer uso de los capture.

El capture (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 el capture indicado en la expresion regular.

>> pattern = re.compile('.*!var{stick}.*')
>> match = pattern.find("fantastick")
>> match.start('var')
5
>> match.end('var')
10

Match. span(capture)

Para un match m retorna 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 al capture. Notar que si la flag save_anchors está activada, estará disponible match.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)
stick

Match. 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
>> for m in matches:
>>   if len(m.group("name")) > name_length and len(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 uso

Ejemplos mas complejos una vez que esté lista la libreria...

Proximamente...
Codigo
Codigo
Codigo
Codigo

Contacto

Oscar Cárcamo oscar.carcamoz@uc.cl
Nicolás Van Sint Jan nicovsj@uc.cl

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

pyrematch-0.1.4.1-cp39-cp39-win_amd64.whl (188.9 kB view hashes)

Uploaded CPython 3.9 Windows x86-64

pyrematch-0.1.4.1-cp39-cp39-manylinux2010_x86_64.whl (901.0 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.12+ x86-64

pyrematch-0.1.4.1-cp39-cp39-manylinux2010_i686.whl (954.3 kB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.12+ i686

pyrematch-0.1.4.1-cp39-cp39-manylinux1_x86_64.whl (901.0 kB view hashes)

Uploaded CPython 3.9

pyrematch-0.1.4.1-cp39-cp39-manylinux1_i686.whl (954.3 kB view hashes)

Uploaded CPython 3.9

pyrematch-0.1.4.1-cp39-cp39-macosx_10_9_x86_64.whl (318.3 kB view hashes)

Uploaded CPython 3.9 macOS 10.9+ x86-64

pyrematch-0.1.4.1-cp38-cp38-win_amd64.whl (188.8 kB view hashes)

Uploaded CPython 3.8 Windows x86-64

pyrematch-0.1.4.1-cp38-cp38-manylinux2010_x86_64.whl (901.7 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64

pyrematch-0.1.4.1-cp38-cp38-manylinux2010_i686.whl (954.4 kB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.12+ i686

pyrematch-0.1.4.1-cp38-cp38-manylinux1_x86_64.whl (901.6 kB view hashes)

Uploaded CPython 3.8

pyrematch-0.1.4.1-cp38-cp38-manylinux1_i686.whl (954.4 kB view hashes)

Uploaded CPython 3.8

pyrematch-0.1.4.1-cp38-cp38-macosx_10_9_x86_64.whl (318.5 kB view hashes)

Uploaded CPython 3.8 macOS 10.9+ x86-64

pyrematch-0.1.4.1-cp37-cp37m-win_amd64.whl (189.0 kB view hashes)

Uploaded CPython 3.7m Windows x86-64

pyrematch-0.1.4.1-cp37-cp37m-manylinux2010_x86_64.whl (901.4 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.12+ x86-64

pyrematch-0.1.4.1-cp37-cp37m-manylinux2010_i686.whl (954.7 kB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.12+ i686

pyrematch-0.1.4.1-cp37-cp37m-manylinux1_x86_64.whl (901.4 kB view hashes)

Uploaded CPython 3.7m

pyrematch-0.1.4.1-cp37-cp37m-manylinux1_i686.whl (954.6 kB view hashes)

Uploaded CPython 3.7m

pyrematch-0.1.4.1-cp37-cp37m-macosx_10_9_x86_64.whl (318.4 kB view hashes)

Uploaded CPython 3.7m macOS 10.9+ x86-64

pyrematch-0.1.4.1-cp36-cp36m-win_amd64.whl (189.0 kB view hashes)

Uploaded CPython 3.6m Windows x86-64

pyrematch-0.1.4.1-cp36-cp36m-win32.whl (152.0 kB view hashes)

Uploaded CPython 3.6m Windows x86

pyrematch-0.1.4.1-cp36-cp36m-manylinux2010_x86_64.whl (901.4 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.12+ x86-64

pyrematch-0.1.4.1-cp36-cp36m-manylinux2010_i686.whl (954.7 kB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.12+ i686

pyrematch-0.1.4.1-cp36-cp36m-manylinux1_x86_64.whl (901.4 kB view hashes)

Uploaded CPython 3.6m

pyrematch-0.1.4.1-cp36-cp36m-manylinux1_i686.whl (954.6 kB view hashes)

Uploaded CPython 3.6m

pyrematch-0.1.4.1-cp36-cp36m-macosx_10_9_x86_64.whl (318.4 kB view hashes)

Uploaded CPython 3.6m macOS 10.9+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page