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.
\dCorrisponde a una cifra. Equivalente a
[0-9].\DCorrisponde a un carattere non numerico. Equivalente a
[^0-9].\sCorrisponde a uno spazio bianco. Equivalente a
[ \t-\r].\SCorrisponde a un carattere non di spaziatura. Equivalente a
[^ \t-\r].\wCorrisponde ai «caratteri di parola» (solo ASCII). Equivalente a
[A-Za-z0-9_].\WCorrisponde 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 letteralir,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 Pythonecc.
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, oppureNonese l’espressione regolare non corrisponde. Questo è l’equivalente per pattern compilato delmatcha 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, oppureNonese nessuna posizione corrisponde. Questo è l’equivalente per pattern compilato della funzionesearch()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.
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
Nonese non corrisponde. Questa è la scorciatoia a livello di modulo:re.match(regex_str, string)è equivalente are.compile(regex_str).match(string).Lo stesso oggetto match viene restituito anche da
search(), dai metodi per pattern compilatoregex.match()/regex.search(), e viene passato alla funzione di sostituzione usata dasub().