Обработка групп захвата в re.саб?


Я хочу взять строку 0.71331, 52.25378 и возврат 0.71331,52.25378 - т. е. просто найдите цифру, запятую, пробел и цифру и удалите пробел.

Это мой текущий код:

coords = '0.71331, 52.25378'
coord_re = re.sub("(d), (d)", ",", coords)
print coord_re

но это дает мне 0.7133,2.25378. Что я делаю не так?

2 52

2 ответа:

вы должны использовать необработанные строки для регулярных выражений, попробуйте следующее:

coord_re = re.sub(r"(\d), (\d)", r",", coords)

С вашим текущим кодом обратные косые черты в вашей строке замены экранируют цифры, поэтому вы заменяете все совпадения эквивалентом chr(1) + "," + chr(2):

>>> ','
'\x01,\x02'
>>> print ','
,
>>> print r','   # this is what you actually want
,

каждый раз, когда вы хотите оставить обратную косую черту в строке, используйте r префикс, или экранировать каждую обратную косую черту (\1,\2).

Python интерпретирует как символ со значением ASCII 1, и передает это в sub.

используйте необработанные строки, в которых Python не интерпретирует \.

coord_re = re.sub(r"(\d), (\d)", r",", coords)

это покрывается прямо в начале re документация, если вам нужна дополнительная информация.