Cuando trabajamos con datos textuales en Power Query, es común enfrentar la necesidad de extraer patrones específicos como códigos, correos electrónicos o formatos personalizados. Sin embargo, uno de los desafíos es que Power Query no admite expresiones regulares (Regex) de forma nativa.
En esta entrada te mostraré una solución práctica: usar código JavaScript a través de la función Web.Page()
para aplicar Regex en Power Query, ideal especialmente para usuarios de Excel.
¿Por qué usar Regex en Power Query?
Las expresiones regulares son una herramienta poderosa para identificar, extraer o transformar datos que siguen un patrón, como:
- Correos electrónicos
- Fechas o números
- Códigos con estructura (ej.
ABC-12-345
) - URLs, extensiones de archivos, identificadores únicos, etc.
Dado que Power Query no tiene soporte nativo para Regex, una alternativa creativa es usar JavaScript incrustado.
Implementación de Regex usando JavaScript en Power Query
1. Función Personalizada fx_regexextract
A continuación, un ejemplo de cómo definir una función en Power Query que permite usar Regex con JavaScript:
mCopiarEditarlet
fx = (texto as text, pattern as text)=>
Web.Page(
"
<script>
var texto = '"&texto&"';
var pattern_re = new RegExp('"&pattern&"','g');
var result = texto.match(pattern_re);
document.write(result);
</script>
"
)[Data]{0}[Children]{0}[Children]{1}[Text]{0}
in
fx
Esta función recibe un texto
y un patrón Regex
, ejecuta el código JavaScript usando Web.Page()
y devuelve la coincidencia encontrada con match()
.
2. Aplicación sobre un conjunto de datos
Una vez creada la función, puedes aplicarla a una columna usando Table.AddColumn
, como en este ejemplo:
mCopiarEditar= Table.AddColumn(
#"Tipo cambiado",
"Digitos",
each Fx_regexextract([CodigosExtra], "\\b[A-Z]{4}-\\d{2,}-\\d{3}")
)
Este patrón busca textos como CHLO-33-446
o JXKE-13-295
. En la imagen que acompaña esta entrada, se puede observar cómo se aplicó esta lógica sobre una columna de texto llamada CodigosExtra
, y cómo se extrajeron los códigos con éxito.(Imagen referencial del proceso aplicado)
Consideraciones importantes
Manejo de caracteres especiales
Cuando el texto contiene comillas simples '
o saltos de línea, es necesario preprocesar el texto para evitar errores en JavaScript:
mCopiarEditar= (input)=> Web.Page("<script> var x='" & Text.Replace(Text.Replace(input,"#(lf)"," "),"'"," ") & "'; document.write(x.match(RegExp('[A-Za-z._%+-]+@[A-Za-z.-]+\\.[A-Za-z]{2,}', 'g'))); </script>"){0}[Data]{0}[Children]{1}[Children]{0}[Text]
Límite de caracteres
La función Web.Page()
tiene un límite aproximado de 30.000 caracteres por celda, lo que debes tener en cuenta para textos extensos.
Ejemplos de Patrones Regex útiles
Finalidad | Patrón Regex |
---|---|
Correo electrónico | [A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}$ |
Código tipo ABC-12-345 | [A-Z]{4}-\\d{2,}-\\d{3} |
Fecha (YYYY-MM-DD) | `(?:19 |
Números decimales | \\d+(?:\\.\\d+)? |
ZIP Code (EEUU) | \\d{5}(?:[-\\s]\\d{4})? |
Extensión de archivos | `.+\.(jpg |
Conclusión
Aunque Power Query no ofrece soporte nativo para Regex, el uso de Web.Page()
con JavaScript amplía enormemente sus capacidades. Esta técnica es especialmente valiosa para usuarios de Excel que necesitan extraer información estructurada sin depender de herramientas externas.
Si trabajas con Power BI Desktop, recuerda que allí también puedes usar scripts de Python o R como alternativa para expresiones regulares.
Deja un comentario