Backreference nella stringa di sostituzione in Python
Quando si lavora con il metodo sub, se
qualcosa deve essere catturato in un gruppo (backreference) nella regex,
allora nella stringa di sostituzione è possibile inserire il contenuto
di quel gruppo scrivendo una doppia barra rovesciata \
e il numero del gruppo. Ad esempio, \1 -
primo gruppo, \2 - secondo gruppo
e così via.
A cosa serve e come usarlo vediamolo con degli esempi.
Esempio
Troviamo tutti i numeri e al loro posto inseriamo questi stessi numeri, ma tra parentesi tonde. Per fare questo sostituiamo tutti i numeri trovati con loro stessi, ma tra parentesi:
txt = '1 23 456 xax'
res = re.sub('(\d+)', '(\1)', txt)
print(res)
Di conseguenza, nella variabile verrà scritto quanto segue:
'(1) (23) (456) xax'
Esempio
Troviamo tutte le stringhe che rappresentano
numeri con delle 'x' attorno e sostituiamo questi
numeri con loro stessi, ma con dei punti esclamativi
'!' attorno:
txt = 'x1x x23x x456x xax'
res = re.sub('x(\d+)x', '!\1!', txt)
print(res)
Di conseguenza, nella variabile verrà scritto quanto segue:
'!1! !23! !456! xax'
Esempio
Risolviamo il seguente problema: data una stringa
'aaa@bbb ccc@ddd' - lettere, poi
chiocciola, poi lettere. Dobbiamo scambiare le posizioni
delle lettere nella sottostringa 'aaa@bbb' prima
di '@' e dopo:
txt = 'aaa@bbb ccc@ddd'
res = re.sub('([a-z]+)@([a-z]+)', '\2@\1', txt)
print(res)
Di conseguenza, nella variabile verrà scritto quanto segue:
'bbb@aaa ccc@ddd'
Problemi pratici
Data una stringa:
txt = '12 34 56 78'
Scambia le posizioni delle cifre in tutti i numeri a due cifre.
Data una stringa con una data:
txt = '31.12.2025'
Converti questa data in '2025.12.31'.