Come utilizzare le espressioni regolari (Regex) in Python

Padroneggia le espressioni regolari di Python utilizzando il modulo re integrato. Impara la corrispondenza delle stringhe, la ricerca di modelli, la ricerca di tutte le occorrenze e la sostituzione del testo.

Prova questa soluzione nell'editor

Panoramica

Le espressioni regolari, comunemente note come regex, sono modelli potenti utilizzati per abbinare, cercare e manipolare stringhe di testo in base a modelli specifici. Regex è ampiamente utilizzato per la verifica della posta elettronica, la convalida del numero di telefono, il web scraping, l'analisi dei log e le attività di ricerca e sostituzione del testo. Python fornisce funzionalità regex complete tramite il modulo `re` integrato.

Il modulo "re" offre diverse funzioni primarie a seconda del tuo obiettivo. La funzione "re.search(pattern, string)" analizza una stringa e restituisce un oggetto di corrispondenza per la prima occorrenza del modello. La funzione "re.match(pattern, string)" è simile ma cerca solo dall'inizio della stringa. Se vuoi recuperare tutte le istanze di un pattern in un blocco di testo, `re.findall(pattern, string)` le restituisce come un elenco di stringhe.

I modelli Regex utilizzano metacaratteri speciali come "\d" per le cifre, "\w" per i caratteri alfanumerici, "+" per una o più occorrenze e "*" per zero o più. Quando si scrive regex in Python, è pratica standard utilizzare stringhe letterali grezze (con il prefisso `r`, come `r"\d+"`) per impedire a Python di trattare le barre rovesciate come sequenze di escape.

Codice e output di esecuzione

Questo script dimostra la convalida delle strutture del formato, l'estrazione di token numerici e la sostituzione di modelli corrispondenti utilizzando il modulo re.

regex_demo.py
Prova nell'editor
import re

# 1. Searching for a pattern in text
log_message = "ERROR: Connection timeout at 04:30:15 on port 8080"
pattern_port = r"port \d+"

match = re.search(pattern_port, log_message)
if match:
    print("Found port pattern:", match.group())

# 2. Extracting all email addresses from a block of text
text = "Contact sales@pyrun.xyz or support@example.com for help."
pattern_email = r"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}"

emails = re.findall(pattern_email, text)
print("Extracted emails:", emails)

# 3. Replacing patterns using re.sub
date_string = "2026/05/25"
# Replace slashes with dashes
clean_date = re.sub(r"/", "-", date_string)
print("Replaced Date:", clean_date)
Uscita terminale
Found port pattern: port 8080
Extracted emails: ['sales@pyrun.xyz', 'support@example.com']
Replaced Date: 2026-05-25

Implementazione passo dopo passo

  • Importa il modulo re integrato.
  • Definisci modelli di ricerca regex utilizzando stringhe non elaborate, come r"\d+" per evitare problemi con la sequenza di escape.
  • Utilizzare re.search() per trovare la prima occorrenza o re.findall() per raccogliere tutte le sottostringhe corrispondenti.
  • Utilizzare re.sub(pattern, replace, string) per eseguire sostituzioni basate su pattern all'interno del testo.

Domande frequenti

Qual è il vantaggio di utilizzare stringhe grezze (r"...") per i modelli regex?

Le stringhe non elaborate trattano le barre rovesciate come caratteri letterali anziché come caratteri di escape. Ad esempio, r"\n" rappresenta una barra rovesciata seguita da una "n", mentre "\n" rappresenta un carattere di nuova riga.

Come posso verificare se una corrispondenza regex ha avuto esito positivo?

re.search() e re.match() restituiscono un oggetto di corrispondenza in caso di successo o None se non viene trovata alcuna corrispondenza. Dovresti controllare il risultato utilizzando un'istruzione condizionale (ad esempio, if match:).

Argomenti correlati

Risorse Python consigliate

Espandi le tue conoscenze con tutorial interattivi, foglietti illustrativi e confronti di codici correlati.