re — espressioni regolari semplici

Questo modulo implementa le operazioni con le espressioni regolari. La sintassi delle espressioni regolari supportata è un sottoinsieme del modulo re di CPython (e in realtà è un sottoinsieme delle espressioni regolari estese POSIX).

Gli operatori e le sequenze speciali supportati sono:

.

Corrisponde a un carattere qualsiasi.

[...]

Corrisponde a un insieme di caratteri. Sono supportati sia i singoli caratteri che gli intervalli, inclusi gli insiemi negati (ad esempio [^a-c]).

^

Corrisponde all’inizio della stringa.

$

Corrisponde alla fine della stringa.

?

Corrisponde a zero o una occorrenza del sotto-pattern precedente.

*

Corrisponde a zero o più occorrenze del sotto-pattern precedente.

+

Corrisponde a una o più occorrenze del sotto-pattern precedente.

??

Versione non greedy di ?, corrisponde a zero o una occorrenza, con preferenza per zero.

*?

Versione non greedy di *, corrisponde a zero o più occorrenze, con preferenza per la corrispondenza più breve.

+?

Versione non greedy di +, corrisponde a una o più occorrenze, con preferenza per la corrispondenza più breve.

|

Corrisponde al sotto-pattern alla sinistra oppure al sotto-pattern alla destra di questo operatore.

(...)

Raggruppamento. Ogni gruppo è di cattura (la sottostringa che cattura può essere ottenuta con il metodo match.group()).

(?:...)

Raggruppamento senza cattura. Ogni gruppo viene confrontato usando le stesse regole del raggruppamento normale, ma non farà parte dell’oggetto match.

\d

Corrisponde a una cifra. Equivalente a [0-9].

\D

Corrisponde a un carattere non numerico. Equivalente a [^0-9].

\s

Corrisponde a uno spazio bianco. Equivalente a [ \t-\r].

\S

Corrisponde a un carattere non di spaziatura. Equivalente a [^ \t-\r].

\w

Corrisponde ai «caratteri di parola» (solo ASCII). Equivalente a [A-Za-z0-9_].

\W

Corrisponde ai caratteri che non sono «caratteri di parola» (solo ASCII). Equivalente a [^A-Za-z0-9_].

\

Carattere di escape. Qualsiasi altro carattere che segue la barra rovesciata, eccetto quelli elencati sopra, viene interpretato letteralmente. Ad esempio, \* è equivalente al * letterale (non viene trattato come l’operatore *). Si noti che \r, \n, ecc. non vengono gestiti in modo speciale e saranno equivalenti alle lettere letterali r, n, ecc. Per questo motivo, non è consigliabile usare le stringhe Python raw (r"") per le espressioni regolari. Ad esempio, r"\r\n" quando usato come espressione regolare è equivalente a "rn". Per far corrispondere il carattere CR seguito da LF, usare "\r\n".

NON SUPPORTATO:

  • ripetizioni con conteggio ({m,n})

  • gruppi con nome ((?P<name>...))

  • asserzioni più avanzate (\b, \B)

  • escape di caratteri speciali come \r, \n - usare invece l’escaping proprio di Python

  • ecc.

Esempio:

import re

# As re doesn't support escapes itself, use of r"" strings is not
# recommended.
regex = re.compile("[\r\n]")

regex.split("line1\rline2\nline3\r\n")

# Result:
# ['line1', 'line2', 'line3', '', '']

Funzioni

re.compile(regex_str: str, flags: int = 0) 'regex'

Compila l’espressione regolare e restituisce un oggetto regex.

re.search(regex_str: str, string: str) 'match | None'

Compila regex_str e lo cerca in una string. A differenza di match, questo cerca nella stringa la prima posizione che corrisponde all’espressione regolare (che può comunque essere 0 se l’espressione regolare è ancorata).

re.sub(regex_str: str, replace: str | Callable, string: str, count: int = 0, flags: int = 0, /) str

Compila regex_str e lo cerca in string, sostituendo tutte le corrispondenze con replace e restituendo la nuova stringa.

replace può essere una stringa o una funzione. Se è una stringa, è possibile usare sequenze di escape della forma \<number> e \g<number> per espandersi nel gruppo corrispondente (o in una stringa vuota per i gruppi senza corrispondenza). Se replace è una funzione, deve accettare un singolo argomento (la corrispondenza) e dovrebbe restituire una stringa di sostituzione.

Se count è specificato e diverso da zero, la sostituzione si interromperà dopo aver effettuato questo numero di sostituzioni. L’argomento flags viene ignorato.

Oggetti Regex

Espressione regolare compilata. Le istanze di questa classe vengono create usando re.compile().

class re.regex

Oggetto espressione regolare compilata restituito da re.compile().

match(string: str, pos: int = 0, endpos: int | None = None) 'match | None'

Applica questa espressione regolare compilata a string, ancorata all’inizio della regione di ricerca, e restituisce un oggetto match, oppure None se l’espressione regolare non corrisponde. Questo è l’equivalente per pattern compilato del match a livello di modulo ed è molto più efficiente quando lo stesso pattern viene applicato a più stringhe.

Il parametro opzionale pos indica un indice in string da cui far iniziare la ricerca; il valore predefinito è 0. Questo non è del tutto equivalente all’estrazione di una porzione della stringa; il carattere di pattern '^' corrisponde all’inizio reale della stringa e nelle posizioni immediatamente successive a un a capo, ma non necessariamente all’indice da cui deve iniziare la ricerca.

Il parametro opzionale endpos limita fino a dove viene cercata string; sarà come se la stringa fosse lunga endpos caratteri, quindi vengono cercati solo i caratteri da pos a endpos - 1. Se endpos è None (il valore predefinito), viene cercata l’intera stringa.

search(string: str, pos: int = 0, endpos: int | None = None) 'match | None'

Scorre string cercando la prima posizione in cui questa espressione regolare compilata produce una corrispondenza, e restituisce un oggetto match, oppure None se nessuna posizione corrisponde. Questo è l’equivalente per pattern compilato della funzione search() a livello di modulo ed è molto più efficiente quando lo stesso pattern viene applicato a più stringhe.

Il parametro opzionale pos indica un indice in string da cui far iniziare la ricerca; il valore predefinito è 0. Questo non è del tutto equivalente all’estrazione di una porzione della stringa; il carattere di pattern '^' corrisponde all’inizio reale della stringa e nelle posizioni immediatamente successive a un a capo, ma non necessariamente all’indice da cui deve iniziare la ricerca.

Il parametro opzionale endpos limita fino a dove viene cercata string; sarà come se la stringa fosse lunga endpos caratteri, quindi vengono cercati solo i caratteri da pos a endpos - 1. Se endpos è None (il valore predefinito), viene cercata l’intera stringa.

sub(replace: str | Callable, string: str, count: int = 0, flags: int = 0, /) str

Cerca questa espressione regolare compilata in string, sostituendo tutte le corrispondenze con replace, e restituisce la nuova stringa. Questo è l’equivalente per pattern compilato della funzione sub() a livello di modulo ed è molto più efficiente quando lo stesso pattern viene applicato a più stringhe.

replace può essere una stringa o una funzione. Se è una stringa, è possibile usare sequenze di escape della forma \<number> e \g<number> per espandersi nel gruppo corrispondente (o in una stringa vuota per i gruppi senza corrispondenza). Se replace è una funzione, deve accettare un singolo argomento (la corrispondenza) e dovrebbe restituire una stringa di sostituzione.

Se count è specificato e diverso da zero, la sostituzione si interromperà dopo aver effettuato questo numero di sostituzioni. L’argomento flags viene ignorato.

split(string: str, max_split: int = -1, /) List[str]

Divide una string usando un’espressione regolare. Se viene fornito max_split, esso specifica il numero massimo di divisioni da effettuare. Restituisce un elenco di stringhe (possono esserci fino a max_split+1 elementi se è specificato).

Oggetti Match

Un oggetto match contiene il risultato di una corrispondenza riuscita.

class re.match(regex_str: str, string: str)

Confronta regex_str con string, ancorato all’inizio della stringa, e restituisce un oggetto match, oppure None se non corrisponde. Questa è la scorciatoia a livello di modulo: re.match(regex_str, string) è equivalente a re.compile(regex_str).match(string).

Lo stesso oggetto match viene restituito anche da search(), dai metodi per pattern compilato regex.match() / regex.search(), e viene passato alla funzione di sostituzione usata da sub().

group(index: int) str

Restituisce la (sotto)stringa corrispondente. index è 0 per l’intera corrispondenza, 1 e oltre per ciascun gruppo di cattura. Sono supportati solo i gruppi numerici.