Quero pegar a string 0.71331, 52.25378
e retornar 0.71331,52.25378
- ou seja, basta procurar um dígito, uma vírgula, um espaço e um dígito e retirar o espaço.
Este é meu código atual:
coords = '0.71331, 52.25378'
coord_re = re.sub("(\d), (\d)", "\1,\2", coords)
print coord_re
Mas isso me dá 0.7133,2.25378
. O que estou fazendo errado?
re.sub(r'(?<=\d), (?=\d)', ',', coords)
.coords.replace(' ', '')
Respostas:
Você deve usar strings brutas para regex, tente o seguinte:
coord_re = re.sub(r"(\d), (\d)", r"\1,\2", coords)
Com seu código atual, as barras invertidas em sua string de substituição estão escapando aos dígitos, então você está substituindo todas as correspondências pelo equivalente a
chr(1) + "," + chr(2)
:>>> '\1,\2' '\x01,\x02' >>> print '\1,\2' , >>> print r'\1,\2' # this is what you actually want \1,\2
Sempre que quiser deixar a barra invertida na string, use o
r
prefixo ou escape de cada barra invertida (\\1,\\2
).fonte
\1
chamado xCoord , é possível instruirre.sub
para substituir as sub strings por nomes de grupo de forma quere.sub(r"(\d), (\d)", r"\1,\2", coords)
resultou na string literalxCoord,52.25378
\1
substitui por algum caractere Unicode bizarro.Python interpreta o
\1
como um caractere com valor ASCII 1 e o passa parasub
.Use strings brutas, nas quais o Python não interpreta o
\
.coord_re = re.sub(r"(\d), (\d)", r"\1,\2", coords)
Isso é abordado logo no início da
re
documentação , caso você precise de mais informações.fonte