Informatica di base

Caratteri d'inizio e fine nelle regexp

Autore

Manuel Ricci

Quando lavoriamo con le espressioni regolari, lavoriamo principalmente con file di testo e quindi il ragionamento che dobbiamo fare è a livello di righe di testo.

Se l’interesse è quello di individuare righe specifiche perché magari sappiamo essere in un determinato formato o perché contengono informazioni essenziali all’inizio o alla fine, ancora una volta abbiamo bisogno degli ancoraggi.

Di ancoraggi ne abbiamo già ampiamente discusso nella lezione sui caratteri e i bordi e giusto per fare un piccolo ripasso con quei caratteri speciali che collocano la nostra espressione regolare in uno specifico punto della stringa di testo.

Quando parliamo quindi di righe di testo abbiamo due ancoraggi che ci tornano utili: $ e ^, i quali rispettivamente indicano la fine e l’inizio di una riga.

L’esempio più semplice da fare, soprattutto per il file riga è quando abbiamo un elenco di file come il seguente:

  • file_1.txt
  • file_2.csv
  • file.txt.pdf
  • file_4.html
  • doc_5.txt
  • file_6.css

Ipotizziamo di voler individuare tutti i file che hanno estensione txt, abbastanza facile direte voi, basta scrivere:

1\.txt

Purtroppo no, o meglio, troviamo i file con estensione txt, ma anche quello che in realtà ha estensione .pdf. Per poter quindi essere sicuri che si tratta solo della vera estensione dobbiamo avvalerci dell’ancoraggio $ che ci posiziona alla fine della riga di testo. La nostra espressione regolare quindi diventerà:

1\.txt$

Ricordate che il backslash prima del punto lo mettiamo perché il punto è un carattere speciale che significa “tutti i caratteri tranne \n”.

A questo punto quindi abbiamo individuato esclusivamente tutti i file con estensione .txt.

Mentre se volessimo individuare solo quelli che iniziano con doc? Qui il discorso è inverso, stiamo cercando qualcosa che si trova all’inizio di una riga e quindi possiamo usare ^, in questo modo:

1^doc

E se volessimo trovare il file che inizia con file e ha estensione txt? Possiamo usare entrambi gli ancoraggi in questo modo:

1^file[_0-9]*\.txt$
  • ^file all’inizio della riga ci deve essere la parola file
  • [_0-9]* seguita da zero o illimitati caratteri _ e numeri da 0 a 9
  • \.txt$ alla fine della riga ci deve essere l’estensione .txt

Posizionarsi all’inizio o alla fine di un file

Se l’esigenza invece è quella di posizionarsi all’inizio o alla fine di un file possiamo avvalerci del supporto di altri due ancoraggi: \A e \Z.

Questi due ancoraggi che rispettivamente si posizionano all’inizio e alla fine del documento ignorano la modalità multiriga (la m tra le flag impostate).

In pratica

Ipotizzando di avere questo testo:

Io sono una persona. Tu sei una persona? Io? Sì tu.

Trovare la righe che terminano con un punto di domanda.

Questo esercizio è molto semplice, ma è solo una cortesia in vista delle prossime lezioni dove entreremo nel vivo delle espressioni regolari.

La soluzione è: \?$

Escape del punto di domanda perché carattere speciale e dollaro per indicare la fine della riga.

Conclusioni

Abbiamo visto quindi questi nuovi ancoraggi che ci posizionano all’inizio e alla fine di una riga o di un documento. Nella prossima lezione daremo un’occhiata più da vicino ai quantificatori, già usati in passato, ma direi che è giunto il momento di capirci veramente qualcosa.

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.