Quiero tomar la cadena 0.71331, 52.25378
y devolver 0.71331,52.25378
, es decir, buscar un dígito, una coma, un espacio y un dígito, y eliminar el espacio.
Este es mi código actual:
coords = '0.71331, 52.25378' coord_re = re.sub("(\d), (\d)", "\1,\2", coords) print coord_re
Pero esto me da 0.7133,2.25378
. ¿Qué estoy haciendo mal?
Debería usar cadenas sin procesar para expresiones regulares, intente lo siguiente:
coord_re = re.sub(r"(\d), (\d)", r"\1,\2", coords)
Con su código actual, las barras invertidas en su cadena de reemplazo están escapando de los dígitos, por lo que está reemplazando todas las coincidencias con el equivalente de chr(1) + "," + chr(2)
:
>>> '\1,\2' '\x01,\x02' >>> print '\1,\2' , >>> print r'\1,\2' # this is what you actually want \1,\2
Cada vez que quiera dejar la barra diagonal inversa en la cadena, use el prefijo r
, o escape cada barra diagonal inversa ( \\1,\\2
).
Python interpreta el \1
como un carácter con un valor ASCII 1, y lo pasa a sub
.
Use cadenas en bruto, en las que Python no interpreta el \
.
coord_re = re.sub(r"(\d), (\d)", r"\1,\2", coords)
Esto está cubierto justo al comienzo de la re
documentación , en caso de que necesite más información.