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:

pythontxt = '1 23 456 xax'

res = re.sub('(\d+)', '(\1)', txt)
print(res)

Di conseguenza, nella variabile verrà scritto quanto segue:

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

pythontxt = 'x1x x23x x456x xax'

res = re.sub('x(\d+)x', '!\1!', txt)
print(res)

Di conseguenza, nella variabile verrà scritto quanto segue:

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

pythontxt = 'aaa@bbb ccc@ddd'
res = re.sub('([a-z]+)@([a-z]+)', '\2@\1', txt)

print(res)

Di conseguenza, nella variabile verrà scritto quanto segue:

python'bbb@aaa ccc@ddd'

Problemi pratici

Задание 1

Data una stringa:

pythontxt = '12 34 56 78'

Scambia le posizioni delle cifre in tutti i numeri a due cifre.

Задание 2

Data una stringa con una data:

pythontxt = '31.12.2025'

Converti questa data in '2025.12.31'.