Python의 str.replace() 메서드는 기본적으로 문자열 내에서 일치하는 모든 부분을 교체합니다. 하지만 때로는 마지막으로 등장하는 문자열만 골라서 교체해야 하는 경우가 있습니다. 이 글에서는 이런 작업을 수행할 수 있는 두 가지 실용적인 방법을 예제 코드와 함께 소개합니다.
방법 1: 문자열 뒤집기([::-1] 슬라이싱) 활용하기
핵심 아이디어는 간단합니다. 문자열을 거꾸로 뒤집으면 '마지막'에 있던 부분이 '처음'으로 이동합니다. 따라서 아래 순서대로 처리하면 원하는 결과를 얻을 수 있습니다.
- 원본 문자열을 뒤집는다.
- 교체 대상 문자열(old)도 뒤집는다.
str.replace()를 사용해 첫 번째 일치 항목만 새 문자열(new)의 뒤집힌 버전으로 교체한다.- 결과 문자열을 다시 뒤집어 원래 순서로 되돌린다.
Python에서는 슬라이싱 표기법인 [::-1]을 사용하면 손쉽게 문자열을 뒤집을 수 있습니다.
def rreplace(s, old, new):
return (s[::-1].replace(old[::-1], new[::-1], 1))[::-1]
rreplace('Hello world, hello world, hello world', 'hello', 'hi')실행 결과:
'Hello world, hello world, hi world'
방법 2: rsplit() 활용하기
더 직관적인 방법은 rsplit()을 사용하는 것입니다. rsplit()은 문자열을 오른쪽부터 분할하며, 두 번째 인자로 분할 횟수를 지정할 수 있습니다. 따라서 딱 한 번만 분할한 뒤 join()으로 새 문자열을 연결하면 마지막 등장 부분만 교체됩니다.
def rreplace(s, old, new):
li = s.rsplit(old, 1) # 오른쪽부터 한 번만 분할
return new.join(li)
rreplace('Hello world, hello world, hello world', 'hello', 'hi')실행 결과:
'Hello world, hello world, hi world'
정리
두 방법 모두 동일한 결과를 얻습니다. 다만 rsplit() 방식은 코드가 더 짧고 가독성이 좋아 일반적으로 더 권장됩니다. 반면 문자열 뒤집기 방식은 replace()의 세 번째 인자인 count 매개변수를 응용하는 좋은 예시이므로, 상황과 취향에 맞게 선택해서 사용하면 됩니다.