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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top