Gruppo Python Re.Sub: numero dopo numero
-
12-11-2019 - |
Domanda
Come posso sostituire foobar
insieme a foo123bar
?
Questo non funziona:
>>> re.sub(r'(foo)', r'\1123', 'foobar')
'J3bar'
Questo funziona:
>>> re.sub(r'(foo)', r'\1hi', 'foobar')
'foohibar'
Penso che sia un problema comune quando hai qualcosa di simile \number
. Qualcuno può darmi un suggerimento su come gestirlo?
Soluzione
La risposta è:
re.sub(r'(foo)', r'\g<1>123', 'foobar')
Estratto rilevante dai documenti:
Oltre alle fughe di personaggi e ai backreferenze come descritto sopra, userà la sottostringa abbinata dal gruppo denominato, come definito dalla sintassi (? P ...). G utilizza il numero di gruppo corrispondente; g <2> è quindi equivalente a 2, ma non è ambiguo in una sostituzione come g <2> 0. 20 sarebbe interpretato come un riferimento al gruppo 20, non un riferimento al gruppo 2 seguito dal carattere letterale "0". Il backreference g <0> sostituisce l'intera sottostringa abbinata al RE.