Il difficile arte delle espressioni regolari

La sfida è, in un documento Writer, trovare numeri tra 0 e 50 (compressi) ma non maggiori. Dovremo utilizzare espressioni regolari.

L’espressione

\b\d\b

troverà numeri di un digito tra 0 e 9. L’espressione

\b\d{1,2}\b

troverà numeri di uno o due digiti, dallo 0 fino al 99… sempre che non ci sia un carattere non numerico attaccato. Per esempio non troverà il numero in a29. Se doviamo trovare anche i numeri al interno di espressioni come a29 dovremo utilizzare alcune condizioni con le «look-ahead» e «Look-behind assertions» più la condizione logica «o» che si ottiene con la barra verticale. Qualcosa così

(?<=[^\d]|^)\d{1,2}(?=[^\d]|$)

Quest’espressione cerca uno o due digiti che si trovino tra qualcosa che non sia ne un digito ne un inizio di paragrafo e un altra cosa che non sia un digito ne un finale di paragrafo.

Quasi ci siamo. Per limitare i numeri dovremo applicare qualche «selezione» in più:

(?<=[^\d]|^)([1-5]?\d)(?=[^\d]|$)

Quest’espressione cerca tra 1 e 59, ma non 60 o più grande.

Guardate l’espressione definitiva:

(?<=[^\d]|^)([1-4]?\d)(?=[^\d]|$)|50

Lascio al lettore il compito d’interpretare l’espressione. Un ripasso al capitolo sulle espressioni regolari del mio libro su Writer può aiutare…


Questo interessante esercizio di espressioni regolari è stato presentato prima nella versione italiana di ask.libreoffice. Ci ho messo un bel po’ a risolverlo… e ancora di più a ricordarmi di lasciarlo per scritto nel blog. Ma qui ci siamo!

Annunci

Commenti?

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

w

Connessione a %s...

This site uses Akismet to reduce spam. Learn how your comment data is processed.