Cómo se puede reemplazar ‘foobar’ a ‘foo123bar’?

Esto no funciona:

>>> re.sub(r'(foo)', r'23', 'foobar')
'J3bar'

Esto funciona:

>>> re.sub(r'(foo)', r'hi', 'foobar')
'foohibar'

Creo que es un problema común: número después de \número. Alguien me puede dar un punto sobre cómo manejar esto?

Esta pregunta ha sido añadido a la Desbordamiento de la Pila de la Expresión Regular de preguntas frecuentes, en «Grupos».

OriginalEl autor zhigang | 2011-05-12

1 Comentario

  1. 210

    La respuesta es:

    re.sub(r'(foo)', r'\g<1>123', 'foobar')

    Correspondiente extracto de la documentación:

    Además de los escapes de carácter y
    retro-referencias como se describió anteriormente,
    \g utilizará la subcadena
    igualada por el grupo llamado nombre, como
    definido por el (?P…) la sintaxis.
    \g utiliza la correspondiente
    número de grupo; \g<2> es, por tanto,
    equivalente a \2, pero no es ambiguo
    en un reemplazo como \g<2>0. \20
    sería interpretado como una referencia a
    el grupo de los 20, no es una referencia para el grupo 2
    seguido por el carácter literal ‘0’.
    La referencia inversa \g<0> sustituye en
    toda la subcadena coincidente por el
    RE.

    No seas tan duro contigo mismo. Es sepultado en la documentación hasta el momento profunda que tomaría la mayoría de la gente mucho más tiempo para leer la documentación de google a su pregunta y tener esta respuesta en TAN.
    El presupuesto exacto, siempre se encuentra aquí en caso de que estés buscando contexto

    OriginalEl autor John Gaines Jr.

Dejar respuesta

Please enter your comment!
Please enter your name here