Я хочу взять строку 0.71331, 52.25378
и вернуть 0.71331,52.25378
- т.е. просто найти цифру, запятую, пробел и цифру и вырезать пробел.
Это мой текущий код:
coords = '0.71331, 52.25378'
coord_re = re.sub("(\d), (\d)", "\1,\2", coords)
print coord_re
Но это дает мне 0.7133,2.25378
. Что я делаю не так?
re.sub(r'(?<=\d), (?=\d)', ',', coords)
.coords.replace(' ', '')
Ответы:
Вы должны использовать необработанные строки для регулярного выражения, попробуйте следующее:
coord_re = re.sub(r"(\d), (\d)", r"\1,\2", coords)
В вашем текущем коде обратная косая черта в строке замены экранирует цифры, поэтому вы заменяете все совпадения эквивалентом
chr(1) + "," + chr(2)
:>>> '\1,\2' '\x01,\x02' >>> print '\1,\2' , >>> print r'\1,\2' # this is what you actually want \1,\2
Каждый раз, когда вы хотите оставить в строке обратную косую черту, используйте
r
префикс или экранируйте каждую обратную косую черту (\\1,\\2
).источник
\1
называется xCoord , можно ли дать указаниеre.sub
заменить подстроки на имена групп таким образом, чтобыre.sub(r"(\d), (\d)", r"\1,\2", coords)
xCoord,52.25378
\1
заменяет его каким-то странным символом Юникода.Python интерпретирует
\1
как символ со значением ASCII 1 и передает его вsub
.Используйте необработанные строки, в которых Python не интерпретирует
\
.coord_re = re.sub(r"(\d), (\d)", r"\1,\2", coords)
Это описано в самом начале
re
документации , если вам понадобится дополнительная информация.источник