在re.sub中处理捕获组?

我想取0.71331, 52.25378这个string0.71331, 52.25378然后返回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 。 我究竟做错了什么?

您应该使用正则expression式的原始string,请尝试以下操作:

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

使用你当前的代码,replacestring中的反斜杠将转义数字,所以你将replace所有匹配的等价于chr(1) + "," + chr(2)

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

任何时候,如果要在string中留下反斜杠,请使用r前缀,或者转义每个反斜杠( \\1,\\2 )。

Python将\1解释为ASCII值为1的字符,并将其传递给sub

使用原始string,其中Python不解释\

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

如果你需要更多的信息,这个在re文档的开头就已经介绍了。