Cómo Usar Expresiones Regulares (Regex) en Power Query con JavaScript

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.

@beat_data

🎯 ¿Sabías que puedes usar JavaScript con Regex en Power Query? 💻🔥 Hoy te muestro cómo aplicar una expresión regular para extraer códigos como CHLO-33-446 desde una columna de texto. 📌 Paso a paso en el video: 1️⃣ Creamos una función llamada fx que recibe un texto y un patrón regex: 2️⃣ Luego la usamos con Table.AddColumn para aplicar el patrón a cada fila: 🧠 Esto es muy útil cuando Power Query no puede manejar expresiones regulares complejas. 👀 Mira el resultado en la vista previa de la tabla 👉 (mostrar imagen) 💡 Bonus tip: asegúrate de escapar bien los caracteres especiales (\). 📲 Sígueme para más trucos de Power BI, Power Query y análisis de datos. 🔗 Más tutoriales en www.fernandopullutasig.com #PowerQuery #Regex #JavaScript #DataTransformation #PowerBI #DataAnalytics #DataTips #MCode #WebScraping #ETL #AprendeConmigo #FernandoPullutasig #PowerBIenEspañol #TipsPowerQuery #ExpresionesRegulares

♬ sonido original – Beat_Data – Beat_Data

¿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

FinalidadPatró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.


Comments

Deja un comentario