Espressioni Regolari (regex) In Python
Espressioni Regolari (RegEx) in Python¶
Obiettivi della Lezione¶
Al termine di questa lezione, sarai in grado di:
- Comprendere cosa sono le espressioni regolari e come funzionano.
- Utilizzare il modulo
re
di Python per lavorare con le espressioni regolari. - Cercare, sostituire e manipolare stringhe utilizzando pattern RegEx.
- Applicare le espressioni regolari per risolvere problemi pratici nella manipolazione di testi.
Introduzione¶
Le espressioni regolari (RegEx) sono sequenze di caratteri che definiscono un pattern di ricerca. Sono strumenti potenti per l’elaborazione e l’analisi di stringhe, permettendo di effettuare ricerche complesse, sostituzioni e validazioni su testi. In Python, il modulo integrato re
offre tutte le funzionalità necessarie per utilizzare le espressioni regolari in modo efficiente.
Spiegazione Teorica¶
Cos’è un’Espressione Regolare?¶
Un’espressione regolare è un pattern che descrive un insieme di stringhe. Può essere utilizzata per:
- Cercare specifiche sequenze di caratteri in un testo.
- Sostituire porzioni di testo in base a un pattern.
- Validare formati di input come indirizzi email, numeri di telefono, codici postali, ecc.
Il Modulo re
di Python¶
Il modulo re
è integrato in Python e fornisce funzioni per lavorare con le espressioni regolari:
re.match()
: Verifica se il pattern corrisponde all’inizio della stringa.re.search()
: Cerca la prima occorrenza del pattern nella stringa.re.findall()
: Restituisce una lista di tutte le occorrenze del pattern.re.sub()
: Sostituisce le occorrenze del pattern con una stringa specificata.re.compile()
: Compila un pattern in un oggetto espressione regolare per un uso ripetuto.
Sintassi delle Espressioni Regolari¶
Metacaratteri Principali¶
.
: Corrisponde a qualsiasi carattere (eccetto il newlinen
).^
: Inizio della stringa.$
: Fine della stringa.*
: Zero o più ripetizioni del carattere precedente.+
: Una o più ripetizioni del carattere precedente.?
: Zero o una ripetizione del carattere precedente.{n}
: Esattamente n ripetizioni.{n,}
: Almeno n ripetizioni.{n,m}
: Da n a m ripetizioni.[]
: Definisce una classe di caratteri. Ad esempio,[a-z]
corrisponde a qualsiasi lettera minuscola.|
: Operatore OR. Ad esempio,a|b
corrisponde aa
ob
.: Carattere di escape, utilizzato per interpretare caratteri speciali come letterali.
Sequenze Speciali¶
d
: Qualsiasi cifra ([0-9]
).D
: Qualsiasi non cifra ([^0-9]
).w
: Qualsiasi carattere alfanumerico ([a-zA-Z0-9_]
).W
: Qualsiasi carattere non alfanumerico ([^a-zA-Z0-9_]
).s
: Qualsiasi spazio bianco ([ tnrfv]
).S
: Qualsiasi non spazio bianco ([^ tnrfv]
).
import re
testo = "Benvenuto al corso di Python. Python è fantastico!"
pattern = r"Python"
occorrenze = re.findall(pattern, testo)
print(occorrenze)
['Python', 'Python']
Spiegazione:
- Importiamo il modulo
re
per utilizzare le espressioni regolari. - Definiamo una stringa
testo
contenente il testo su cui effettuare la ricerca. - Creiamo un pattern semplice
pattern
che corrisponde alla parola “Python”. - Utilizziamo
re.findall()
per trovare tutte le occorrenze del pattern nel testo. - Stampa:
['Python', 'Python']
2. Uso di Metacaratteri e Quantificatori¶
import re
testo = "La cifra 12345 è composta da numeri consecutivi."
pattern = r"d{5}"
match = re.search(pattern, testo)
if match:
print(f"Trovato: {match.group()}")
else:
print("Nessuna corrispondenza trovata.")
Trovato: 12345
Spiegazione:
d
corrisponde a qualsiasi cifra da 0 a 9.{5}
indica che cerchiamo esattamente 5 cifre consecutive.re.search()
cerca la prima occorrenza del pattern nel testo.- Stampa:
Trovato: 12345
3. Validazione di un Indirizzo Email¶
import re
email = "%esempio@mail.com"
pattern = r"^[w.-]+@[w.-]+.w{2,}$"
if re.match(pattern, email):
print("Indirizzo email valido.")
else:
print("Indirizzo email non valido.")
Indirizzo email non valido.
Spiegazione:
^
e$
assicurano che l’intera stringa corrisponda al pattern.[w.-]+
corrisponde a una sequenza di caratteri alfanumerici, punti o trattini.@
è il simbolo della chiocciola nell’email..w{2,}
corrisponde a un punto seguito da almeno due caratteri alfanumerici (es:.com
,.it
).- Stampa:
Indirizzo email non valido.
4. Sostituzione di Testo con re.sub()
¶
import re
testo = "La temperatura oggi è di 25 gradi."
pattern = r"d+"
nuovo_testo = re.sub(pattern, "30", testo)
print(nuovo_testo)
La temperatura oggi è di 30 gradi.
Spiegazione:
d+
corrisponde a una o più cifre consecutive.re.sub()
sostituisce tutte le occorrenze del pattern con la stringa “30”.- Stampa:
La temperatura oggi è di 30 gradi.
import re
frase = "Marco e Lucia sono andati a Roma durante l'Estate."
pattern = r"b[A-Z][a-z]*"
parole_maiuscole = re.findall(pattern, frase)
print(parole_maiuscole)
['Marco', 'Lucia', 'Roma', 'Estate']
Risultato atteso: ['Marco', 'Lucia', 'Roma', 'Estate']
Esercizio 2: Sostituisci Spazi con Trattini¶
Utilizza re.sub()
per sostituire ogni spazio in una stringa con un trattino -
.
import re
frase = "Questo è un test per sostituire gli spazi."
nuova_frase = re.sub(r"s", "-", frase)
print(nuova_frase)
Questo-è-un-test-per-sostituire-gli-spazi.
Risultato atteso: Questo-è-un-test-per-sostituire-gli-spazi.
Esercizio 3: Validazione Numero di Telefono¶
Scrivi un’espressione regolare per verificare se una stringa è un numero di telefono nel formato xxx-xxx-xxxx
.
import re
numero = "123-456-7890"
pattern = r"^d{3}-d{3}-d{4}$"
if re.match(pattern, numero):
print("Numero di telefono valido.")
else:
print("Numero di telefono non valido.")
Numero di telefono valido.
Risultato atteso: Numero di telefono valido.
Buone Pratiche e Consigli¶
Utilizza le Raw Strings (
r""
):Quando scrivi espressioni regolari, è consigliabile usare le stringhe raw per evitare conflitti con i caratteri di escape di Python. Esempio:
r"n"
rappresenta esattamente i caratterie
n
, non un newline.Testa i Pattern RegEx:
Prima di implementare un’espressione regolare nel tuo codice, testala utilizzando strumenti online come regex101 per assicurarti che funzioni come previsto.
Commenta Pattern Complessi:
Se il tuo pattern è complesso, considera di utilizzare il flag
re.VERBOSE
per suddividere l’espressione su più righe e aggiungere commenti esplicativi.pattern = re.compile(r""" ^ # Inizio della stringa [w.-]+ # Parte locale dell'email @ # Simbolo @ [w.-]+ # Dominio .w{2,3}$ # Estensione (.com, .it, etc.) """, re.VERBOSE)
Gestisci le Eccezioni:
Quando lavori con input utente, assicurati di gestire possibili errori o input non validi per evitare crash dell’applicazione.
Conclusione¶
Le espressioni regolari sono uno strumento essenziale per chiunque lavori con la manipolazione di testi in Python. Con il modulo re
, hai a disposizione un’ampia gamma di funzionalità per cercare, sostituire e validare stringhe in modo efficiente. La comprensione dei metacaratteri e dei pattern ti permetterà di risolvere problemi complessi in modo elegante e conciso.
Risorse Aggiuntive¶
- Documentazione Ufficiale Python: re — Regular expression operations
- Libro Consigliato: Python Crash Course di Eric Matthes
- Video Tutorial: re Module – How to Write and Match Regular Expressions (Regex)