{"id":78,"date":"2017-12-05T17:10:00","date_gmt":"2017-12-05T16:10:00","guid":{"rendered":"https:\/\/www.dammiunadritta.it\/?p=78"},"modified":"2017-12-05T17:42:39","modified_gmt":"2017-12-05T16:42:39","slug":"trovare-una-data-in-un-testo","status":"publish","type":"post","link":"https:\/\/www.dammiunadritta.it\/espressioni-regolari\/trovare-una-data-in-un-testo\/","title":{"rendered":"Trovare una data in un testo con le Espressioni Regolari"},"content":{"rendered":"
Trovare una data in un testo sarebbe un compito piuttosto facile con qualsiasi editor di testo, se non fosse per il fatto che una data, almeno in italiano, pu\u00f2 essere scritta in molti modi diversi.<\/p>\n
Per esempio il 05\/04\/2017 pu\u00f2 essere scritto: Come fare allora, se non ne conosciamo il formato esatto, a trovare una data in un testo?<\/p>\n Fortunatamente ci vengono in soccorso le Espressioni Regolari (ne abbiamo gi\u00e0 parlato in un precedente articolo<\/a>), un linguaggio utilizzabile nella maggior parte degli editor di testo (il migliore fra i gratuiti \u00e8 senz’altro Notepad++<\/a>).<\/p>\n Ed ecco, senza troppi giri di parole, l’espressione regolare che riesce ad individuare qualsiasi tipo di data in un testo.<\/p>\n Fate la prova: scaricate Notepad++ dal link qui sopra, incollateci il testo di questa pagina, aprite il modulo di ricerca cliccando sul binocolo nella barra in alto oppure digitando Ora cliccate in alto a destra su “Trova successivo” e vedrete che le date saranno evidenziate una ad una ogni click che fate.<\/p>\n Esaminando l’espressione regolare qui sopra, vediamo che \u00e8 composta da 5 gruppi, ognuno racchiuso da una coppia di parentesi tonde.<\/p>\n Il primo gruppo rappresenta il giorno della data ed \u00e8 composto da due Quindi il primo gruppo individua una o due cifre ma, poich\u00e9 \u00e8 anche possibile che la data sia scritta senza giorno (per esempio Il secondo gruppo rappresenta i possibili separatori di data: nel nostro caso abbiamo previsto come separatori lo spazio ( Notate anche che il punto \u00e8 preceduto da una backslash ( Anche il secondo gruppo pu\u00f2 anche non esserci e quindi \u00e8 seguito da un Il terzo gruppo rappresenta i nomi dei mesi. Tutte le possibili varianti sono separate dal carattere Per tenere conto anche del fatto che i mesi possono essere abbreviati dalle tre lettere iniziali, il rimanente del nome del mese \u00e8 raggruppato fra parentesi e seguito da un punto interrogativo.<\/p>\n Cos\u00ec, Anche l’intero terzo gruppo \u00e8 seguito da un punto interrogativo per cercare perfino le date in cui compare solamente l’anno.<\/p>\n Il quarto gruppo \u00e8 uguale al secondo e rappresenta il separatore di data, mentre il quinto gruppo rappresenta l’anno che pu\u00f2 essere scritto con 4 cifre ( I cinque gruppi che abbiamo esaminato formano quindi una Espressione regolare che ci permette di\u00a0trovare una data in un testo in qualsiasi formato sia scritta: anche se contiene solamente l’anno!<\/p>\n <\/p>\n","protected":false},"excerpt":{"rendered":" Trovare una data in un testo sarebbe un compito piuttosto facile con qualsiasi editor di testo, se non fosse per il fatto che una data, almeno in italiano, pu\u00f2 essere scritta in molti modi diversi. Per esempio il 05\/04\/2017 pu\u00f2 essere scritto: 5\/4\/2017, 05\/04\/2017, 5\/04\/2017, 5.5.2017, 05-4-2017, 5 aprile 2017, …<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[14],"tags":[19,17,18,20],"yoast_head":"\n5\/4\/2017<\/code>,
05\/04\/2017<\/code>,
5\/04\/2017<\/code>,
5.5.2017<\/code>,
05-4-2017<\/code>,
5 aprile 2017<\/code>,
05 apr '17<\/code>,
aprile 2017<\/code>, solo per fare alcuni esempi.<\/p>\n
CTRL+F<\/code>\u00a0incollate l’intera espressione regolare nella casella di testo “Trova” e biffate in basso a sinistra la casella “Espressione regolare”.<\/p>\n
(\\d\\d?)?(\\s|\/|-|\\.)?(\\d|\\d\\d|gen(naio)?|feb(braio)?|mar(zo)?|apr(ile)?|mag(gio)?|giu(gno)?|lug(lio)?|ago(sto)?|set(tembre)?|ott(obre)?|nov(embre)?|dic(embre)?)?(\\s|\/|-|\\.)?(\\d\\d\\d\\d|'\\d\\d)<\/code><\/pre>\n
La RegEx in dettaglio<\/h3>\n
\\d<\/code>\u00a0che significa “una cifra qualsiasi”; notate che la seconda
\\d<\/code>\u00e8 seguita da un punto interrogativo che significa che il carattere subito precedente pu\u00f2 esserci o non esserci.<\/p>\n
aprile 2017<\/code>) il punto interrogativo subito fuori la parentesi di chiusura avvisa che l’intero gruppo pu\u00f2 anche non esserci.<\/p>\n
\\s<\/code>), la slash (
\/<\/code>), il trattino alto (
-<\/code>), il punto (
\\.<\/code>). Notate come ogni carattere \u00e8 separato dal simbolo
|<\/code>\u00a0che, nelle espressioni regolari, ha la funzione di un
OR<\/code> logico.<\/p>\n
\\<\/code>) che rappresenta un carattere di “escape” e che ci dice che quel punto non \u00e8 il carattere jolly delle RegEx che rappresenta “qualsiasi carattere”, ma \u00e8 proprio il simbolo del punto.<\/p>\n
?<\/code> .<\/p>\n
|<\/code> e quindi sono ugualmente possibili.<\/p>\n
gen(naio)?<\/code>significa che deve essere ricercato sia
gen<\/code> che
gennaio<\/code>.<\/p>\n
\\d\\d\\d\\d<\/code>) oppure con 2 cifre precedute da un apostrofo (
'\\d\\d<\/code>).<\/p>\n