Regular Expressions (RegEx) in Power Query

Non è propriamente un programma di BI, ma nelle sue versioni più recenti anche Excel può fare grandi cose!

Moderatore: Utilizzo_prof_Excel

Rispondi
Avatar utente

Enrico Galli
Messaggi: 890 | Topic creati
Iscritto il: dom 28 giu 2020, 19:03
Luogo: San Giovanni in Persiceto (BO)
Ringraziato: 326 volte
Contatta:

Regular Expressions (RegEx) in Power Query

Messaggio 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:
Allegati
RegEx in Power Query.xlsx
(17.42 KiB) Scaricato 153 volte


Enrico Galli
Link utili: I nostri tutorial | Come inserire: Immagini - Codice - Risolto
Se il forum ti è stato utile, considera di supportarlo con una libera donazione
Avatar utente

Powerwin
Messaggi: 9 | Topic creati
Iscritto il: lun 6 lug 2020, 19:28
Ringraziato: 2 volte

Regular Expressions (RegEx) in Power Query

Messaggio 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
Il mondo è pieno di persone che vogliono raccogliere i frutti di alberi che non hanno mai piantato.
Avatar utente

Autore del topic
Enrico Galli
Messaggi: 890 | Topic creati
Iscritto il: dom 28 giu 2020, 19:03
Luogo: San Giovanni in Persiceto (BO)
Ringraziato: 326 volte
Contatta:

Regular Expressions (RegEx) in Power Query

Messaggio 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:
Enrico Galli
Link utili: I nostri tutorial | Come inserire: Immagini - Codice - Risolto
Se il forum ti è stato utile, considera di supportarlo con una libera donazione
Rispondi