Vai al contenuto principale
Pitone intermedio2026-07-31 · 11 min di lettura

Spiegazione di Python Regex (2026)

Regex è la caratteristica più temuta di Python. Non è così difficile, ma l'80% dei tutorial introduce la teoria (\d, \w, greedy vs lazy) prima di mostrarti un singolo pattern che utilizzeresti effettivamente nel codice reale. Questo tutorial capovolge la situazione.

Tratteremo: le basi del modulo re, i cinque pattern che coprono il 90% del lavoro reale, quando re.compile aiuta effettivamente, i gruppi denominati rispetto a quelli numerati e i quattro casi in cui regex è lo strumento SBAGLIATO.

Il modulo in 60 secondi

Tutto risiede nel modulo stdlib re. Tre funzioni coprono la maggior parte delle esigenze:

▶ PYTHONeditable · runs in your browser

Regola: usa "re.search" in caso di dubbi. re.match controlla solo l'inizio; dimenticarlo porta a "la mia espressione regolare non corrisponde!" 30 minuti persi.

Corde grezze: usale sempre

Il prefisso r"..." disabilita l'interpretazione della barra rovesciata. Senza di esso, "\d" diventa "\\d" in Python, che il motore regex vede come \d — stesso risultato, ma solo per sbaglio e solo per \d. "\n" in una regex è un ritorno a capo, non i due caratteri ` + n`.

▶ PYTHONeditable · runs in your browser

Memoria muscolare: ogni letterale regex inizia con "r". Nessuna eccezione.

I 5 modelli che coprono il 90% del lavoro reale

1. Estrarre tutti i numeri interi dal testo

▶ PYTHONeditable · runs in your browser

Nota: 199.99 si divide in ['199', '99'] — \d+ non supera il punto. Utilizza r"\d+(?:\.\d+)?" per i decimali opzionali:

▶ PYTHONeditable · runs in your browser

2. Normalizza gli spazi bianchi

▶ PYTHONeditable · runs in your browser

\s+ corrisponde a qualsiasi sequenza di spazi/tabulazioni/ritorno a capo. Sostituisci con un unico spazio, rimuovi i bordi. Questa è la risposta di Python a sed -E 's/[[:space:]]+/ /g'.

3. Estrarre il nome host da un URL

▶ PYTHONeditable · runs in your browser

Le parentesi creano un gruppo di acquisizione; .group(1) restituisce il suo contenuto. [^/:]+ = "uno o più caratteri che non sono / o :" — si ferma al separatore di porta OPPURE al percorso.

Per l'analisi degli URL di produzione utilizzare urllib.parse.urlparse (gestisce casi limite come userinfo + IPv6). Regex è per l'estrazione rapida e sporca.

4. Convalida e-mail allentata

Non esiste alcuna espressione regolare che convalidi completamente le e-mail secondo RFC 5322. Chiunque ti dica il contrario sta vendendo qualcosa. Ma questo cattura il 99% degli indirizzi reali senza rifiutare falsamente quelli validi:

▶ PYTHONeditable · runs in your browser

Le ancore (^ e $) forzano la corrispondenza della stringa intera. Senza di essi, "foo@bar" all'interno di una frase più grande corrisponderebbe.

Produzione: inviare una email di conferma. Questo è l'UNICO validatore di posta elettronica affidabile.

5. Gruppi di acquisizione denominati

I gruppi numerati ((...) + .group(1)) vanno bene per 2-3 acquisizioni. Oltre a ciò, vincono i nomi:

▶ PYTHONeditable · runs in your browser

.groupdict() restituisce un dict di tutti i gruppi con nome. Aggiungi/riordina i gruppi senza interrompere ogni sito di chiamata che faceva riferimento a ".group(3)".

re.compile — quando effettivamente aiuta

▶ PYTHONeditable · runs in your browser

La stdlib mantiene una piccola cache di pattern compilati (dimensione predefinita 512), quindi le chiamate re.search(pattern, text) una tantum sono effettivamente gratuite dopo il primo colpo. re.compile aiuta esplicitamente quando:

1. Il modello viene utilizzato all'interno di un ciclo ristretto (milioni di corrispondenze).

2. Vuoi memorizzare il modello come costante a livello di modulo per grep-ability.

3. Sono necessari .finditer(), .pattern, .flags sull'oggetto compilato.

Non sovracompilare. Ogni "re.compile" a livello di modulo aggiunge un piccolo costo in termini di tempo di importazione.

Flag comuni

▶ PYTHONeditable · runs in your browser

Combina con |: re.IGNORECASE | re.MULTILINE.

Quando regex è lo strumento SBAGLIATO

1. Analisi di HTML/XML → utilizza un vero parser

▶ PYTHONeditable · runs in your browser

La classica risposta Stack Overflow a questo problema ha 20 anni ed è ancora vera.

2. Analisi di JSON → utilizzare json

Il modulo json gestisce virgolette annidate, caratteri di escape, Unicode e ogni caso limite RFC 8259. JSON con analisi regex è un segnale anti-pattern.

3. Analisi delle date → utilizzare dateutil o datetime.strptime

dateutil.parser.parse("2026-07-30") accetta ogni formato che un essere umano potrebbe digitare. datetime.strptime gestisce i formati conosciuti in modo efficiente. Entrambi gestiscono i fusi orari. Regex dovrebbe reinventare tutto.

4. Pattern nidificati/ricorsivi → utilizza un generatore di parser

Parentesi abbinate, JSON annidato, espressioni bilanciate sono formalmente oltre il potere delle regex (territorio grammaticale libero dal contesto). Usa pyparsing / lark / ANTLR — o semplicemente percorri la stringa con un piccolo parser.

Debug dell'espressione regolare

Utilizza regex101.com (scegli il gusto "Python"). Incolla il modello + testo di esempio; evidenzia le corrispondenze in tempo reale, spiega ogni metacarattere e mostra i gruppi con nome. Il modo più veloce per apprendere le espressioni regolari in modo intuitivo.

Per il debug a livello di codice, re.DEBUG stampa la macchina a stati compilata:

▶ PYTHONeditable · runs in your browser

Pratica

Scrivi una regex per ciascuno. Soluzioni di seguito.

1. Estrai il numero di versione da "Python 3.13.2 (main, Jan 15 2026, 10:32:11)" - dovrebbe restituire "3.13.2".

2. Dividere "mela,banana; ciliegia arancia" su qualsiasi delimitatore (,, ; o spazio).

3. Riscrivi foo.bar_baz-123 come FOO.BAR_BAZ-123 (solo lettere maiuscole, lascia cifre e punteggiatura).

Soluzioni:

▶ PYTHONeditable · runs in your browser

Regex diventa un superpotere una volta superati i primi 10 schemi. Il trucco sta nel costruire la memoria muscolare sui cinque esercizi sopra indicati: coprono il 90% del lavoro reale. Raggiungi un vero parser nel momento in cui ti ritrovi a scrivere riferimenti all'indietro per bilanciare le parentesi.

Passaggio successivo: regex + lezioni di elaborazione testo nel percorso Automazione — esercitati su file di registro, dati CSV e attività di web scraping con Python reale in esecuzione nel tuo browser.

Pronto a provarlo?

15 lezioni gratuite previa iscrizione gratuita — nessuna tessera. Prova la piattaforma e poi decidi.

Inizia gratis →

Or unlock every lesson

Pro — $12/mo, unlimited AI, cancel any time. Refund within 14 days worldwide.

See Pro plans →

Get one Python lesson + one career idea every Friday

No spam, no "buy our course now". Three bullets, every Friday. Unsubscribe with one click.