¿Cómo extraigo información de mi documento usando REGEX?
Ejemplos prácticos
En el artículo actual, demostramos cómo puede extraer cualquier dato del documento gracias a las expresiones regulares de elementos múltiples en PaperOffice y almacenarlo automáticamente como una palabra clave para el documento.
Hemos creado un documento de muestra a continuación que tiene una fecha específica. Este documento es una factura. El patrón de fecha en nuestro documento tiene este formato:
Extrae información automáticamente de las facturas
Día, seguido de un espacio, el mes compuesto por letras, pero siempre la primera letra en mayúscula seguido de una coma, otro espacio y luego el año.
Por ejemplo: 20 de septiembre de 2019 o 5 de marzo de 2022
Para extraer esta fecha podemos usar la siguiente expresión regular (REGEX):
(0[1-9]|[12][0-9]|3[01])\s([A-Z][a-z]{2}),\s(20\d{2})
Dividamos la expresión en grupos individuales. Estos grupos están separados por corchetes simples ().
En el primer grupo buscamos el día en números: (0[1-9]|[12][0-9]|3[01])
(0[1-9]|[12][0-9]|3[01])\s([A-Z][a-z]{2}),\s(20\d{2})
El día debe estar separado por tres declaraciones diferentes.
Como no sabemos qué fecha puede aparecer en el documento, puede ser el primer día (01) o el último día (31) del mes, por lo que tienen que en consecuencia se nombran diferentes opciones.
Estos se separan con el carácter "|".
Ejemplo: (1|2|3) = 1 o 2 o 3.
A continuación se incluye una lista de caracteres permitidos entre corchetes. Múltiples corchetes coinciden con múltiples caracteres. Si una expresión debe describir varios caracteres, estos simplemente se adjuntan uno tras otro. Luego, la entrada se compara con su expresión de izquierda a derecha.
Por supuesto, no es necesario enumerar todos los números. En general, sin embargo, toda la expresión entre paréntesis representa un solo carácter.
-
0[1-9] Esta cadena significa que el número puede comenzar con un "0" seguido de un número del 1 al 9. Entonces obtenemos cualquier número del 01 al 09.
La cadena busca un patrón numérico que comience con un cero. Si su documento normalmente tiene una fecha "5 de marzo de 2022", es decir, sin el número "0" delante del número "5", se omite el "0" en la cadena de caracteres.
- [12][0-9] Esta cadena de caracteres significa que el número puede comenzar con un "1" o un "2", seguido de cualquier número del 0 al 9. El resultado puede ser cualquier sale el número del 10 al 29.
-
3[01] Esta cadena significa que un número podría comenzar con un "3" seguido de un "0" o un "1". El resultado podría ser 30 o 31.
Ahora buscamos un espacio: \s
(0[1-9]|[12][0-9]|3[01])
\s([A-Z][a-z]{2}),\s(20\d{2})
Extraemos el mes
Extraer mes: ([A-Z][a-z]{2})
(0[1-9]|[12][0-9]|3[01])\s([A-Z][a-z]{2}),\s(20\d{2})
- [A-Z] Esta cadena significa que estamos buscando una letra mayúscula de A-Z. Por ejemplo, la letra "S" de septiembre. Cabe señalar que las letras mayúsculas y minúsculas se tratan por separado.
- [a-z]{2} Esta cadena significa que estamos buscando dos letras minúsculas de a-z. Eso sería ep de "Sep".
Ahora buscamos la coma y el espacio: ,\s
(0[1-9]|[12][0-9]|3[01])\s([A-Z][a-z]{2}),\s(20\d{2})
Extraemos año:
Extraer año: (20\d{2})
(0[1-9]|[12][0-9]|3[01])\s([A-Z][a-z]{2}),\s(20\d{2})
En el último grupo buscamos el año: (20\d{2})
Empezamos a buscar cualquier año, pero sabemos que será ≥ 2000.
20 Esta cadena significa que estamos buscando cualquier año que comience exactamente con 20.
\d{2} Esta cadena significa que estamos buscando un posible número de dos dígitos, es decir, de "00" a "99".
Por ejemplo, el carácter \d coincide con un dígito entre 0 y 9, mientras que el carácter \d{2} coincide con un número de dos dígitos.
Las variables se leen del documento y se ponen a disposición
Si ahora se usa la expresión regular en PaperOffice, el resultado final es la fecha "20 de septiembre de 2019".
De esta manera, se puede leer cualquier fecha de un documento sin que sepamos el valor original. Estos grupos también se pueden usar en cualquier otro lugar y moverse libremente para leer otros formatos de fecha.
Aquí hay otro ejemplo:
Las facturas con diferentes formatos se pueden leer fácilmente
Día, seguido de un espacio, el mes compuesto por letras, pero siempre la primera letra en mayúscula seguido de un punto, otro espacio y luego el año.
Para extraer esta fecha se puede utilizar la expresión regular anterior cambiando la coma por el punto.
Esto se puede declarar con esta expresión: \.
La expresión regular completa es la siguiente:
(0[1-9]|[12][0-9]|3[01])\s([A-Z][a-z]{2})\.\s(20\d{2})
Siempre puede validar su expresión regular creada yendo a la página https://regex101.com para validarlo junto con su texto. Regex101 no solo verificará si su expresión regular es correcta, sino que le explicará la mayor parte de la expresión regular.
Y así puedes usar los diferentes juegos de caracteres para cualquier cosa.
Formato de fecha diferente
Otro ejemplo para facturas con el formato de fecha 20/09/2022
Las expresiones regulares se pueden expandir a cualquier formato
Para este formato de fecha podemos utilizar el mismo REGEX de día y año anterior y lo combinamos con otro grupo para buscar el mes entre 01 al 12 en número con (0[1-9]|1[0-2])
- 0[1-9] Esta cadena significa que el número puede comenzar con un "0" seguido de un número del 1 al 9. Entonces obtenemos cualquier número del 01 al 09.
- 1[0-2]) Esta cadena significa que el número comienza con un “1” seguido de un 0, 1 o un 2. Entonces obtenemos cualquier número del 10 al 12
El separador “/” lo buscamos con \/
La expresión regular completa sería la siguiente:
(0[1-9]|[12][0-9]|3[01])\/(0[1-9]|1[0-2])\/(20\d{2})