파이썬의 replace 함수 는 문자열 안에 있는 특정 문자열을 다른 문자열로 바꾸기 위해 씁니다. 이 글에서 설명했던 translate 함수와 비슷해 보입니다. 그런데 용례가 달라요. 이 부분도 간단하게 언급하고 넘어가겠습니다.
- maketrans 함수와 translate 함수에 대해 알아봅시다. 링크
파이썬 replace 함수
먼저 replace 함수의 설명을 보겠습니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/rep7.png)
- old
- old라는 부분 문자열이 나오면
- new
- new라는 부분 문자열로 바꿉니다.
- count
- 앞에서부터 몇 개의 패턴을 바꿀 것인지
old와 new를 받고, count를 받습니다. 모든 부분 string old에 대해, new로 바꾼다는 의미입니다. 예를 들자면, “abcdefg”에서, “a”를 “A”로 바꾸고 싶습니다. 이 때, “abcdefg”.replace(“a”, “A”)를 입력해 주면 됩니다.
이는, “a”를 “A”로 바꾸는 것이기 때문입니다. 예제를 몇 개 보도록 합시다.
몇 가지 예제
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/rep1.png)
먼저 1번 예제를 보겠습니다. 문자열이 “abcd ab”입니다. replace 함수를 썼는데요. old가 “a”이고, new가 “A”가 됩니다. 문자열 s에서 부분 문자열 “a”를 만나는 순간, “A”로 바꾼다는 의미입니다. 실행 결과를 볼까요?
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/rep2.png)
“Abcd Ab”가 나옵니다. 1번째와 6번째 위치에 “a”라는 패턴이 있었습니다. 이를 “A”로 바꾼 것 뿐입니다. 이제 2번째 예제를 보겠습니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/rep3.png)
이번에도 마찬가지로 “a”를 만나면 “A”로 바꾸게 하였습니다. 그런데, 3번째 인자에 1이 들어갔습니다. 이는 무엇을 의미할까요? 앞에서부터 탐색을 할 때, 1개의 “a” 패턴만을 바꾸겠다는 의미입니다. 무슨 소리인가? 도식화를 시켜 보겠습니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/rep8.png)
“abcd ab”에서 “a”라는 부분 문자열이 나오는 위치를 표시해 보았습니다. 노란색과, 회색 부분이지요. 처음 위치부터 탐색했다면 노란색 부분이 1번째, 회색 부분이 2번째일 것입니다. count가 1이라는 의미는, 노란색 부분, 즉 왼쪽으로부터 1번째 부분까지만 “A”로 치환하겠다는 의미입니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/rep9.png)
따라서 노란색 부분만 “A”로 바뀌게 됩니다. 실행 결과를 볼까요?
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/rep4.png)
“Abcd ab”가 나왔습니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/rep5.png)
이제 예제 3번을 봅시다. “a”라는 부분 문자열을 만나면, “”로 바꾸겠다고 합니다. 이건 결과가 어떻게 나올까요? “a”가 나타나는 위치를 노란색으로 표시해 봅시다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/rep10.png)
이들이 다 빈 문자열로 바뀌게 됩니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/rep6.png)
따라서 “bcd b”가 나오게 됩니다.
translate 와의 차이점
그러면, 언제 translate, maketrans를 쓰고 언제 replace를 써야 할까요? 이 글을 다시 정리해 보면
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/rep11.png)
먼저 translate는 각 문자에 대해 어떤 문자, (혹은 None)으로 번역할 지에 대한 mapping 테이블을 생성하면 그에 맞춰서 바꾸게 됩니다. 예를 들어, 위 그림은 ‘a’는 없애고, ‘B’가 나오면 ‘b’로 번역하라는 의미입니다.
![](https://codingdog.pe.kr/wp-content/uploads/2023/07/rep12.png)
예를 들어, 위 그림과 같은 상황이라면, “aB”는 “b”로 번역되게 됩니다. 이렇게 각 문자별로 특정 문자 (혹은 None)로 번역해야 한다면, translate를 쓰는 것이 좋습니다. 그런데, 이것은 문자 대 문자로 mapping 되는 것이기 때문에, 특정 부분 문자열을 다른 문자열로 바꾸는 작업을 하기에는 적합한 함수가 아닙니다. 따라서
- translate, maketrans는
- 특정 문자를 다른 문자로 바꿔야 하는 관계를 하나의 mapping이라 할 때
- mapping 관계에 참여하는 문자가 많은 경우에 쓰시면 됩니다.
- 중요한 것은 문자 대 문자 (혹은 None)으로 mapping 되어야 한다는 것입니다.
- replace는
- 특정 문자열을 다른 문자열로 replace 해야 할 때 쓰시면 됩니다.