Обработка групп захвата в re.sub?
Я хочу взять строку 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
. Что я делаю не так?
Ответы
Ответ 1
Вы должны использовать необработанные строки для регулярного выражения, попробуйте следующее:
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
).
Ответ 2
Python интерпретирует \1
как символ с ASCII значением 1 и передает его на sub
.
Используйте необработанные строки, в которых Python не интерпретирует \
.
coord_re = re.sub(r"(\d), (\d)", r"\1,\2", coords)
Это предусмотрено в самом начале re
документации, если вам нужно больше информации.