Trovare un ago nel pagliaio, parte 1ª: conosciamo le espressioni regolari

(1 voto)
Etichettato sotto :
Trovare un ago nel pagliaio, parte 1ª: conosciamo le espressioni regolari

Poco conosciute dagli utenti medi, le espressioni regolari sono un mezzo potentissimo per eseguire ricerche e sostituzioni all’interno di testi. Con questa breve introduzione sarete in grado di usare le espressioni regolari con Microsoft Word e in generale capirete quali sono i principi alla base di questo strumento. La Wikipedia ci dice che «le espressioni regolari (in inglese regular expression, che può trovarsi abbreviata in regexp, regex o RE) sono sintassi attraverso le quali si possono rappresentare insiemi di stringhe». Così a prima vista può sembrare un argomento di appannaggio esclusivo degli ingegneri informatici. Eppure, senza esserne consapevoli, quasi tutti abbiamo usato le espressioni regolari almeno una volta: quando scriviamo «*.xls» (senza virgolette) nella casella di ricerca per cercare un file di Excel, ebbene, quell’asterisco è uno dei simboli usati nelle regex! In questo caso l’asterisco corrisponde a zero o più caratteri, da trovare come nome di un file, così come il carattere jolly ? (punto interrogativo) corrisponde a un singolo carattere. Le espressioni regolari servono per l’appunto a trovare corrispondenze di «modelli» (in inglese pattern) di stringhe, ovvero di concatenazioni di lettere e di numeri.

Quando si usano? In linea di massima le espressioni regolari sono particolarmente utili quando bisogna realizzare un gran numero di modifiche ripetitive a un documento. «Modifica ripetitiva» è un concetto molto noto nell’ambito delle traduzioni, purtroppo. Stiamo parlando, ad esempio, di quei casi in cui ci si accorge verso la fine di un lavoro di aver usato un verbo sbagliato, oppure quando bisogna eliminare le file duplicate di una tabella, e via dicendo. In questi casi c’è chi semplicemente ricorre alle proprie doti di dattilografo, chi cerca appositi programmi (con l’inconveniente di dover pagare, scaricare e installare un’applicazione a parte) e c’è chi invece usa le regex. Tutti i principali processatori di testo (e nel nostro caso specifico Microsoft Word non è un’eccezione) dispongono di un insieme di caratteri speciali (denominati anche wildcard, caratteri jolly o metacaratteri) che si possono combinare fra loro e unire a testo ordinario (per esempio le lettere dalla a alla zeta) per costruire espressioni regolari. Queste espressioni consentono di trovare testo strutturato in un certo modo (i pattern di cui sopra) e – più importante ancora – permettono di sostituirlo con altro testo.

L’insieme di caratteri speciali disponibili varia da programma a programma, anche se alcuni caratteri si trovano quasi sempre. Dato che la maggioranza di noi lavora quotidianamente con Word, useremo la sintassi di Word, anche se è significativamente distinta da quella usata nella maggior parte dei linguaggi di programmazione, e presenta parecchie caratteristiche non standard. Ricordiamo che l’ambito d’uso delle espressioni regolari è la finestra Cerca / Sostituisci. La casella di controllo «Usa caratteri jolly» dev’essere selezionata, altrimenti i seguenti caratteri speciali non verranno interpretati correttamente. I caratteri speciali disponibili in Word sono:

Per trovare

Digitare il carattere speciale

Esempio

Un singolo carattere

?

c?ne trova «cane» e «cene». Questo carattere trova anche la stringa all’interno di altre stringhe. Per esempio, troverà «andiamocene» o «canestro».
Qualsiasi stringa di caratteri

*

c*ne trova «canzone» e «composizione». L’asterisco restituisce tutti i caratteri e gli spazi posti fra i caratteri ordinari.
La parte iniziale di una parola

<

<(can) trova tutte le parole che iniziano con «can», come «canzone», «cane», ma non «scansare» o «accanito».
La parte finale di una parola

>

(one)> trova tutte le parole che terminano in «one», come «canzone», «combinazione», quindi non trova «onesto» o «disonesto».
Uno o più caratteri specificati

[ ]

s[ao]no trova «sano» e «sono» ma non «seno».
Un singolo carattere in un intervallo di caratteri

[x-z]

[m-p]ano trova «mano» e «nano», ma non «sano». Il sottoinsieme dev’essere dato in ordine alfabetico. In questo caso, scrivere [p-m] sarebbe sbagliato.
Qualsiasi carattere ad eccezione di quelli compresi nell’intervallo fra parentesi

[!x-z]

s[!a-e]no trova «sono», ma non «sano» {né «seno».
Esattamente n occorrenze del carattere o dell’espressione precedente

{n}

car{2}o trova «carro» ma non «caro». ca[a-z]{2}o trova «carro», «callo», «casto», «caso».
ca([a-z]){2}o trova «carro», «callo» ma non «casto» o «caso» (notare le parentesi tonde).
Almeno n occorrenze del carattere o dell’espressione precedente

{n,}

car{1,}o trova «caro» e «carro». Attenzione: se è stato modificato il separatore di elenchi nelle impostazioni di Windows, anziché una virgola bisogna inserire un punto e virgola.
Da n a m occorrenze del carattere o dell’espressione precedente

{n,m}

10{1,3} trova 10, 100 e 1000.
Una o più occorrenze del carattere o dell’espressione precedente

@

not@e trova «note» e «notte».
Qualunque carattere speciale

\carattere speciale

Far precedere il carattere da cercare con una barra rovesciata. Ad esempio \? trova tutti i segni interrogativi, mentre \* tutti gli asterischi.
Per raggruppare i caratteri e indicare l’ordine di ricerca

()

Le parentesi tonde si usano per creare espressioni regolari complesse.

Le vere e proprie espressioni regolari si ottengono combinando i suddetti caratteri speciali, anche raggruppandoli con parentesi tonde. Questa è la chiave di volta di tutto il sistema. Usando le parentesi tonde per raggruppare le stringhe da trovare se ne stabilisce l’ordine di ricerca, ovvero usando il carattere jolly \n (dove n è un numero) è possibile indicare nella casella Sostituisci come riordinare le stringhe trovate. Un esempio chiarirà meglio il concetto: se cerchiamo (Mario) (Rossi) e indichiamo \2 \1 nella casella Sostituisci, tutte le occorrenze Mario Rossi saranno sostituite da Rossi Mario.

Dopo questa introduzione teorica, vediamo alcuni esempi pratici.

Esempio 1

Se volessimo modificare il formato delle date contenute in un testo da britannico a statunitense (cioè da 4th January 2008 a January 4, 2008), o viceversa, dovremmo usare la seguente espressione:

[0-9]{1,2}[dhnrst]{2} <[AFJMNSOD]*> [0-9]{4}

Esaminiamo nel dettaglio i vari componenti:

  • [0-9] cerca i numeri dallo zero al nove; per trovare le date (composte da una o due cifre), aggiungiamo la funzione {1,2}
  • [dhnrst]{2} cerca il suffisso ordinale «th» insieme alle eccezioni «nd», «st» e «rd». Per farlo creiamo un gruppo specifico con queste lettere, [dhnrst], e dato che si tratta di abbreviature di due lettere, aggiungiamo la funzione {2}.
  • A questo punto inseriamo uno spazio, corrispondente a quello che precede il mese. Si inserisce normalmente con la barra spaziatrice.
  • <[AFJMNSOD]*> trova i mesi, poiché i mesi in inglese iniziano sempre con una delle seguenti lettere maiuscole: AFJMNSOD. Per indicare che la parola può avere un numero qualsiasi di caratteri dopo l’iniziale (contrassegnata dal simbolo <), aggiungiamo l’asterisco e poiché vogliamo che la ricerca restituisca una sola parola, aggiungiamo anche il segno > alla fine.
  • Inseriamo un altro spazio, sempre con la barra spaziatrice.
  • [0-9]{4} trova gli anni. La prima parte dell’espressione restituisce un numero compreso fra zero e nove, mentre la seconda parte definisce che si devono trovare 4 occorrenze dell’espressione precedente.

Infine bisogna aggiungere le parentesi in modo da raggruppare gli elementi, in questo modo:

  • ([0-9]{1,2})([dhnrst]{2})[space](<[AFJMNSOD]*>)[space]([0-9]{4})

Procederemo alla sostituzione scrivendo questo testo nella casella Sostituisci (per chiarezza, [spazio] indica che bisogna digitare uno spazio con la barra):

  • \3[spazio]\1,[spazio]\4

Esempio 2

Un altro esempio potrebbe essere rappresentato dalla necessità di contrassegnare in rosso tutte le frasi fra parentesi quadre o graffe. Per farlo possiamo usare la seguente espressione

[\[,\{]*[\],\}]

lasciando vuota la casella Sostituisci dopo aver selezionato il colore rosso dal menu Formato | Carattere. Esaminiamo nei dettagli l’espressione. La prima parentesi quadra apre il gruppo di caratteri da cercare, costituito dalla parentesi quadra e dalla parentesi graffa, entrambe aperte. Questi caratteri sono separati da una virgola, perché vogliamo che la ricerca restituisca o l’uno o l’altro. Dato che ambedue sono caratteri jolly, per cercarli va usato il carattere backslash, la barra invertita. Notate che abbiamo usato la virgola come separatore dell’elenco, ma è possibile che si debba cambiare a punto e virgola, se quest’ultimo è stato impostato come separatore delle liste. Per saperlo, verificate le Impostazioni regionali dal Pannello di controllo. Chiudiamo la parentesi quadra e digitiamo un asterisco per indicare che ci interessa trovare testi fra parentesi di qualunque lunghezza (anche di lunghezza uguale a zero, ovvero questa espressione troverà anche il testo “[]” o “{}”). Dopo l’asterisco ripetiamo l’espressione, inserendo i due caratteri corrispondenti alle parentesi chiuse.

 

Non neghiamo che all’inizio le espressioni regolari si presentino abbastanza ostiche. Eppure, dopo le prime perplessità, con una certa pratica ci si renderà conto della loro utilità anche per eseguire verifiche dei testi tradotti. Consigliamo di tenere sempre sotto mano la tabella con il riassunto dei caratteri jolly (che è comunque presente nell’aiuto di Word) e di non scoraggiarsi se all’inizio le ricerche non restituiranno quanto ci si aspetta. Per chi volesse approfondire l’argomento raccomandiamo il seguente link: http://word.mvps.org/FAQs/General/UsingWildcards.htm. Chi volesse aggiungere nei commenti le proprie espressioni regolari con un breve commento sull’ambito di utilizzo, è il benvenuto.

Qabiria white logo

Crediamo nell’aumento della produttività attraverso l’uso creativo della tecnologia.

Ultime notizie

Contatti

Qabiria Studio SLNE
Carrer Lleida, 3 1-2
08912 Badalona
(Barcelona)
SPAGNA

+34 675 800 826

qabiria

Inviaci un messaggio

Ricevi la newsletter

Vuoi leggere gli articoli e le novità di Qabiria direttamente nella posta?