Flag per le espressioni regolari in Python
Per impostare i flag come uno dei parametri opzionali per i metodi che lavorano con le espressioni regolari, si utilizza la seguente sintassi:
flags=re.nome_flag
Flag principali per lavorare con le espressioni regolari
| Flag | Scopo |
|---|---|
re.IGNORECASE |
Ignora il caso dei caratteri. |
re.DOTALL |
Il punto corrisponde a qualsiasi carattere, incluso il ritorno a capo. |
re.I |
Rende la ricerca insensibile al caso. |
re.L |
Cerca le parole in base alla lingua corrente.
Questa interpretazione interessa il gruppo alfabetico
(\w e \W), così come
il comportamento del confine di parola (\b e
\B).
|
re.M |
Il carattere $ effettua la ricerca alla fine
di qualsiasi riga di testo (non solo alla fine del testo)
e il carattere ^ effettua la ricerca all'inizio
di qualsiasi riga di testo (non solo all'inizio
del testo).
|
re.S |
Cambia il significato del punto (.) in
corrispondenza con qualsiasi carattere, incluso il ritorno a capo.
|
re.U |
Interpreta le lettere in base al
set di caratteri Unicode. Questo flag influisce
sul comportamento di \w, \W, \b,
\B. In Python 3+ questo flag
è impostato di default.
|
re.X |
Permette una sintassi di espressione regolare multiriga.
Ignora gli spazi all'interno del pattern (tranne gli spazi all'interno
di un set [] o quando escapati con
backslash) e tratta il carattere
non escapato '#' come un commento.
|
Esempio
Con il flag re.IGNORECASE si può
ignorare il caso dei caratteri. Vediamo
come si fa. In questo esempio l'espressione regolare
troverà solo le lettere minuscole:
txt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)
print(res)
Risultato dell'esecuzione del codice:
'! ! CCC DDD'
Esempio
Ora aggiungiamo come quarto parametro
del metodo il flag re.IGNORECASE e l'espressione regolare
inizierà a cercare i caratteri in tutti i casi:
txt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)
print(res)
Risultato dell'esecuzione del codice:
'! ! ! !'
Esempio
Troviamo con l'espressione regolare tutti i ritorni a capo:
txt = '''aaa
bbb'''
res = re.sub('\n', '!', txt)
print(res)
Risultato del codice eseguito:
'aaa!bbb'
Esempio
Ma, se serve sostituire tutti i caratteri, usando il punto nell'espressione regolare, non verranno catturati i ritorni a capo:
txt = '''aaa
bbb'''
res = re.sub('.', '!', txt)
print(res)
Risultato del codice eseguito:
'!!!
!!!'
Esempio
Per correggere questo errore, si dovrebbe
applicare il flag re.DOTALL:
res = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)
Risultato del codice eseguito:
'!!!!!!!'
Esempio
Nel parametro si possono passare anche diversi
flag, mettendo tra di loro l'operatore +.
Prima sostituiamo la lettera 'a'
alla fine della riga:
txt = '''
aaa
AAA
aaa'''
res = re.sub('aaa
', '!', txt)
print(res)
Risultato del codice eseguito:
'''
aaa
AAA
!
'''
Esempio
Ora impostiamo il flag re.M:
res = re.sub('aaa
', '!', txt, flags=re.M)
print(res)
Risultato del codice eseguito:
'''
!
AAA
!
'''
Esempio
Applichiamo ora anche il flag per ignorare il caso:
res = re.sub('aaa
', '!', txt, flags=re.M+re.IGNORECASE)
print(res)
Risultato del codice eseguito:
'''
!
!
!
'''