Informatica di base

Set di caratteri nelle espressioni regolari

Autore

Manuel Ricci

Approfondiamo finalmente una coppia di caratteri speciali già visti nelle lezioni precedenti. La coppia di parentesi quadre [ ]. La sintassi viene usata per definire un set di caratteri ed è estremamente semplice da usare.

Ipotizziamo di avere una serie di file:

  • file_1.txt
  • file_2.txt
  • file_3.txt
  • file_a.txt
  • file_b.txt
  • file_c.txt

Qualora volessimo individuare tutti i file che hanno una lettera dopo l’underscore, potremmo scrivere:

1file_[abc]\.txt

Semplice no?

Con lo stesso sistema possiamo individuare anche quelle parole che iniziano con una lettera maiuscola o minuscola:

1\b[mM]\w+\b

L’avete capita al volo? Se sì, sono contento per voi. Se no, la spiego:

  • \b l’abbiamo visto nelle lezioni precedenti ed è un ancoraggio che indica il “bordo” di una parola
  • [mM] è il nostro set di caratteri per individuare una lettera m maiuscola o minuscola all’inizio di un parola (essendo dopo \b può essere solo all’inizio)
  • \w individua lettere, numeri e underscore (quindi le lettere successive alla lettera che ho indicato prima)
  • + è il quantificatore che indica una o infine ricorrenze di \w

La sequenza di caratteri

Se volessimo cercare una sequenza di caratteri possiamo avvalerci del -. Dall’esempio precedente al posto di [mM] possiamo scrivere [a-zA-Z] questo significa che individuerà tutte le lettere minuscole o maiuscole.

Se invece stessimo cercando dei numeri possiamo scrivere [0-9].

Occhio all’ordine

Attenzione però a non scrivere [z-a] o [9-0], perché in quel caso si verificherà un errore dato che i caratteri prima e dopo il trattino devono essere in ordine crescere di codice ASCII.

Allora magari starete pensando perché non possiamo scrivere [A-z]? Perché se date un’occhiata alla tabella ASCII noterete che A-Z e a-z non sono contigui, dopo la Z ci sono dei simboli. Quindi verrebbero presi in considerazione anche loro nell’eventualità.

Altra piccola curiosità [0-9] è l’equivalente di \d, visto nelle lezioni precedenti e meglio discusso nella lezione sulle cifre e gli spazi

Attenzione al trattino

Il trattino nei set possiamo definirlo quasi un carattere speciale. Nella lezione precedente quando abbiamo individuato le date, abbiamo usato senza problemi il trattino perché si trovava agli estremi del set (dopo o prima della parentesi quadra). Se steste cercando il trattino e lo collocaste in mezzo al set dovete ricordarvi di fare l’escape con il \.

Escludere dei caratteri

Se volessimo escludere dei caratteri dal set possiamo usare subito dopo [ l’apice ^ in questo modo:

1[^abc]
2[^123]

L’apice indica la negazione all’interno di un set e possiamo dichiarare piú negazioni separandole con la virgola in questo modo:

1[^a-z, 0-9]

E se voleste trovare ^, semplice… basta non metterlo all’inizio del set.

Se prendiamo in esame l’espressione regolare di prima \b[mM]\w+\b come potremmo modificarla affinché cerchi tutte le parole di una frase senza badare a quale sia la lettera iniziale, ma assicurandosi che non vengano presi in considerazioni simboli, spazi, numeri e underscore?

1\b[^\W\s\d_]+\b

Spiego ciò che c’è di nuovo (tutto a parte \b e il quantificatore +:

  • [...] set di caratteri
  • ^ negazione, quindi tutto quello che segue non deve essere individuato
  • \W tutti i simboli (contrario di \w che individua lettere, numeri e underscore)
  • \s spazi
  • \d numeri
  • _ undescore

Diventano sempre più difficili, ma anche più semplici da leggere.

Un paio di esercizi sulle espressioni regolari

Dati questi numeri:

  • 01001001 01000011 01000011 01001101
  • 0x49 0x43 0x43 0x4d

  • Individuare i valori binari con l’uso dei set di caratteri
  • Individuare i valori esadecimali con l’uso dei set di caratteri
  • Bonus: scoprire cosa significa il codice binario.

Per quanto riguarda i numeri binari è semplice possiamo scrivere:

1[0-1]{8}

E il gioco è fatto

Per gli esadecimali:

10x[0-9a-f][0-9a-f]

Oppure

10x[0-9a-f]{2}

Il bonus lo lascio a voi :)

Conclusioni

Abbiamo quindi approfondito il set di caratteri nella prossima lezione vedremo nel dettaglio un paio di ancoraggi $ e ^.

Caricamento...

Diventiamo amici di penna? ✒️

Iscriviti alla newsletter per ricevere una mail ogni paio di settimane con le ultime novità, gli ultimi approfondimenti e gli ultimi corsi gratuiti puubblicati. Ogni tanto potrei scrivere qualcosa di commerciale, ma solo se mi autorizzi, altrimenti non ti disturberò oltre.

Se non ti piace la newsletter ti ricordo la community su Discord, dove puoi chiedere aiuto, fare domande e condividere le tue esperienze (ma soprattutto scambiare due meme con me). Ti aspetto!

Ho in previsione di mandarti una newsletter ogni due settimane e una commerciale quando capita.