paquete - Subdivisión de expresiones regulares de Python: referencia inversa separada del dígito
lista de expresiones regulares python (2)
En un patrón de reemplazo de expresiones regulares, una referencia inversa se parece a /1
. Si desea incluir un dígito después de esa referencia inversa, esto fallará porque se considera que el dígito es parte del número de referencia inversa:
# replace all twin digits by zeroes, but retain white space in between
re.sub(r"/d(/s*)/d", r"0/10", "0 1")
>>> sre_constants.error: invalid group reference
El patrón de sustitución r"0/1 0"
funcionaría bien, pero en el ejemplo que falla, la referencia /1
se interpreta como /10
.
¿Cómo se puede separar el dígito ''0''
de la referencia /1
que lo precede?
En lugar de usar una referencia inversa con un número de secuencia ( /1
), puede usar grupos con nombre y el problema se resuelve:
# replace all twin digits by zeroes, but retain whitespace in between
re.sub(r"/d(?P<whitespace>/s*)/d", r"0/g<whitespace>0", "0 1")
>>> ''0 0''
Resulta que este truco se describe de hecho en la documentación de re.sub .
Puede usar /g<1>
, como se menciona en los documentos .