[python] 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. 내가 도대체 ​​뭘 잘못하고있는 겁니까?



답변

정규식에 원시 문자열을 사용해야합니다. 다음을 시도하십시오.

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)를 이스케이프합니다 .


답변

Python은 \1을 ASCII 값 1을 가진 문자로 해석하여 sub.

Python이 \.

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

자세한 정보가 필요한 경우 re문서 의 시작 부분에서 다룹니다 .


답변