Home » 레퍼런스 » PYTHON » 파이썬 replace 함수로 특정 문자열을 다른 문자열로 바꿔 봅시다.

파이썬 replace 함수로 특정 문자열을 다른 문자열로 바꿔 봅시다.

파이썬의 replace 함수문자열 안에 있는 특정 문자열을 다른 문자열로 바꾸기 위해 씁니다.에서 설명했던 translate 함수와 비슷해 보입니다. 그런데 용례가 달라요. 이 부분도 간단하게 언급하고 넘어가겠습니다.

  • maketrans 함수와 translate 함수에 대해 알아봅시다. 링크

파이썬 replace 함수

먼저 replace 함수의 설명을 보겠습니다.

[그림 1] 함수에 대한 설명
  • old
    • old라는 부분 문자열이 나오면
  • new
    • new라는 부분 문자열로 바꿉니다.
  • count
    • 앞에서부터 몇 개의 패턴을 바꿀 것인지

old와 new를 받고, count를 받습니다. 모든 부분 string old에 대해, new로 바꾼다는 의미입니다. 예를 들자면, “abcdefg”에서, “a”를 “A”로 바꾸고 싶습니다. 이 때, “abcdefg”.replace(“a”, “A”)를 입력해 주면 됩니다.

이는, “a”를 “A”로 바꾸는 것이기 때문입니다. 예제를 몇 개 보도록 합시다.


몇 가지 예제

[그림 2] 예제 1번 프로그램

먼저 1번 예제를 보겠습니다. 문자열이 “abcd ab”입니다. replace 함수를 썼는데요. old가 “a”이고, new가 “A”가 됩니다. 문자열 s에서 부분 문자열 “a”를 만나는 순간, “A”로 바꾼다는 의미입니다. 실행 결과를 볼까요?

[그림 3] 예제 1번의 결과

“Abcd Ab”가 나옵니다. 1번째와 6번째 위치에 “a”라는 패턴이 있었습니다. 이를 “A”로 바꾼 것 뿐입니다. 이제 2번째 예제를 보겠습니다.

[그림 4] 예제 2번 프로그램

이번에도 마찬가지로 “a”를 만나면 “A”로 바꾸게 하였습니다. 그런데, 3번째 인자에 1이 들어갔습니다. 이는 무엇을 의미할까요? 앞에서부터 탐색을 할 때, 1개의 “a” 패턴만을 바꾸겠다는 의미입니다. 무슨 소리인가? 도식화를 시켜 보겠습니다.

“abcd ab”에서 “a”라는 부분 문자열이 나오는 위치를 표시해 보았습니다. 노란색과, 회색 부분이지요. 처음 위치부터 탐색했다면 노란색 부분이 1번째, 회색 부분이 2번째일 것입니다. count가 1이라는 의미는, 노란색 부분, 즉 왼쪽으로부터 1번째 부분까지만 “A”로 치환하겠다는 의미입니다.

따라서 노란색 부분만 “A”로 바뀌게 됩니다. 실행 결과를 볼까요?

[그림 5] 예제 2번의 결과

“Abcd ab”가 나왔습니다.

[그림 6] 예제 3번 프로그램

이제 예제 3번을 봅시다. “a”라는 부분 문자열을 만나면, “”로 바꾸겠다고 합니다. 이건 결과가 어떻게 나올까요? “a”가 나타나는 위치를 노란색으로 표시해 봅시다.

이들이 다 빈 문자열로 바뀌게 됩니다.

[그림 7] 예제 3번의 결과

따라서 “bcd b”가 나오게 됩니다.


translate 와의 차이점

그러면, 언제 translate, maketrans를 쓰고 언제 replace를 써야 할까요? 이 을 다시 정리해 보면

먼저 translate는 각 문자에 대해 어떤 문자, (혹은 None)으로 번역할 지에 대한 mapping 테이블을 생성하면 그에 맞춰서 바꾸게 됩니다. 예를 들어, 위 그림은 ‘a’는 없애고, ‘B’가 나오면 ‘b’로 번역하라는 의미입니다.

예를 들어, 위 그림과 같은 상황이라면, “aB”는 “b”로 번역되게 됩니다. 이렇게 각 문자별로 특정 문자 (혹은 None)로 번역해야 한다면, translate를 쓰는 것이 좋습니다. 그런데, 이것은 문자 대 문자로 mapping 되는 것이기 때문에, 특정 부분 문자열을 다른 문자열로 바꾸는 작업을 하기에는 적합한 함수가 아닙니다. 따라서

  • translate, maketrans는
    • 특정 문자를 다른 문자로 바꿔야 하는 관계를 하나의 mapping이라 할 때
    • mapping 관계에 참여하는 문자가 많은 경우에 쓰시면 됩니다.
    • 중요한 것은 문자 대 문자 (혹은 None)으로 mapping 되어야 한다는 것입니다.
  • replace는
    • 특정 문자열을 다른 문자열로 replace 해야 할 때 쓰시면 됩니다.

Leave a Comment

8 + 1 =