Pagina 1 di 1

Regular Expressions (RegEx) in Power Query

Inviato: mar 25 ago 2020, 13:05
da Enrico Galli
Ciao a tutti :)
Come qualcuno di voi saprà, Power Query non supporta nativamente le espressioni regolari (RegEx), che sono uno strumento potentissimo per trovare delle parti di testo "nascoste" all'interno di stringhe complesse. In Power BI Desktop è possibile ricorrere a uno script in R o Python, ma Excel non ha questa opzione.

Seguendo un articolo di Imke Feldmann (nota divulgatrice di script avanzati in codice M), ho trovato questo workaround che voglio mostrarvi: utilizza il comando Web.Page costruendo al suo interno una stringa in JavaScript. Lo sto ancora sperimentando per capire quali elementi di RegEx riesca a supportare, e spero mi aiuterete anche voi a implementare pattern più complessi :geek:

La funzione M che dobbiamo creare è questa:

Codice: Seleziona tutto

// fnRegex
let   
    fx=(text,regex)=>
    Web.Page(
        "<script>
            var x='"&Text.Replace(text, "'", "\'")&"';
            var y=new RegExp('"&regex&"','g');
            var b=x.match(y);
            document.write(b);
        </script>"
    )[Data]{0}[Children]{0}[Children]{1}[Text]{0}

in
    fx
E' una semplice funzione che accetta due parametri: la stringa di testo originale, e il pattern RegEx da utilizzare per il confronto.
Una volta caricata nel nostro modello, possiamo utilizzarla per creare una colonna personalizzata: tutti i match trovati saranno messi nella colonna creata, concatenati da una virgola.

Esempio:
Immagine

Per trovare i numeri di 4 cifre presenti nelle stringhe, utilizzeremo il pattern "\\d{4}":

Codice: Seleziona tutto

= Table.AddColumn(#"Modificato tipo", "Numero di 4 cifre", each fnRegex([Frasi], "\\d{4}"))
E il risultato è quello atteso:
Immagine

Che ne pensate? E' una funzione che userete? Fatemi sapere e mettete qui sotto i vostri esempi! :wave:

Regular Expressions (RegEx) in Power Query

Inviato: sab 5 set 2020, 11:30
da Powerwin
Ciao Enrico Galli (saluto) potresti provare con i 3 pattern più utilizzati

1) (\w{1,61}\.)+[a-zA-Z]{2,12}(?=\/) - trova indirizzo internet
2) ^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$ - trova indirizzo mail
3) ^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$ - trova un indirizzo IP

Regular Expressions (RegEx) in Power Query

Inviato: sab 5 set 2020, 17:06
da Enrico Galli
Ciao Powerwin , sto facendo alcune prove ma ho constatato che questo "stratagemma" non supporta correttamente tutta la sintassi RegExp di Javascript. O meglio, porta a dei risultati che non sono quelli di un parser come quello di https://www.regextester.com (o uno degli altri mille tutti molto simili).
Farò ulteriori esperimenti e vi aggiornerò :wave: