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.