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:

pythonflags=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:

pythontxt = 'aaa bbb CCC DDD'
res = re.sub('[a-z]+', '!', txt)

print(res)

Risultato dell'esecuzione del codice:

python'! ! 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:

pythontxt = 'aaa AAA bbb BBB'
res = re.sub('[a-z]+', '!', txt, flags=re.IGNORECASE)

print(res)

Risultato dell'esecuzione del codice:

python'! ! ! !'

Esempio

Troviamo con l'espressione regolare tutti i ritorni a capo:

pythontxt = '''aaa
  bbb'''
res = re.sub('\n', '!', txt)

print(res)

Risultato del codice eseguito:

python'aaa!bbb'

Esempio

Ma, se serve sostituire tutti i caratteri, usando il punto nell'espressione regolare, non verranno catturati i ritorni a capo:

pythontxt = '''aaa
  bbb'''
res = re.sub('.', '!', txt)

print(res)

Risultato del codice eseguito:

python'!!!
!!!'

Esempio

Per correggere questo errore, si dovrebbe applicare il flag re.DOTALL:

pythonres = re.sub('.', '!', txt, flags=re.DOTALL)
print(res)

Risultato del codice eseguito:

python'!!!!!!!'

Esempio

Nel parametro si possono passare anche diversi flag, mettendo tra di loro l'operatore +. Prima sostituiamo la lettera 'a' alla fine della riga:

pythontxt = '''
  aaa
  AAA
  aaa'''
res = re.sub('aaa
', '!', txt)

print(res)

Risultato del codice eseguito:

python'''
  aaa
  AAA
  !
'''

Esempio

Ora impostiamo il flag re.M:

pythonres = re.sub('aaa
', '!', txt, flags=re.M)
print(res)

Risultato del codice eseguito:

python'''
  !
  AAA
  !
'''

Esempio

Applichiamo ora anche il flag per ignorare il caso:

pythonres = re.sub('aaa
', '!', txt, flags=re.M+re.IGNORECASE)
print(res)

Risultato del codice eseguito:

python'''
  !
  !
  !
'''