Richard Richard - 1 year ago 66
Python Question

Handling capturing groups in re.sub?

I want to take the string

0.71331, 52.25378
and return
- i.e. just look for a digit, a comma, a space and a digit, and strip out the space.

This is my current code:

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

But this gives me
. What am I doing wrong?


You should be using raw strings for regex, try the following:

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

With your current code, the backslashes in your replacement string are escaping the digits, so you are replacing all matches the equivalent of chr(1) + "," + chr(2):

>>> '\1,\2'
>>> print '\1,\2'
>>> print r'\1,\2'   # this is what you actually want

Any time you want to leave the backslash in the string, use the r prefix, or escape each backslash (\\1,\\2).