로 바꾸려면 어떻게 foobar
해야 foo123bar
합니까?
작동하지 않습니다.
>>> re.sub(r'(foo)', r'\1123', 'foobar')
'J3bar'
이것은 작동합니다 :
>>> re.sub(r'(foo)', r'\1hi', 'foobar')
'foohibar'
과 같은 것을 가질 때 일반적인 문제라고 생각합니다 \number
. 누구든지 이것을 처리하는 방법에 대한 힌트를 줄 수 있습니까?
답변
정답은:
re.sub(r'(foo)', r'\g<1>123', 'foobar')
문서에서 관련 발췌 :
위에서 설명한대로 문자 이스케이프 및 역 참조 외에도 \ g는 (? P …) 구문에 정의 된대로 name이라는 그룹과 일치하는 하위 문자열을 사용합니다. \ g는 해당 그룹 번호를 사용합니다. 따라서 \ g <2>는 \ 2와 동일하지만 \ g <2> 0과 같은 대체물에서는 모호하지 않습니다. \ 20은 그룹 2에 대한 참조가 아니라 리터럴 문자 ‘0’이 아닌 그룹 20에 대한 참조로 해석됩니다. 역 참조 \ g <0>은 RE와 일치하는 전체 하위 문자열을 대체합니다.