Python 문자열 찾아 바꾸기(치환) 방법 3가지

특정 문자열을 찾아서 치환하는 방법은 개발할 때 자주 필요한 방법입니다. Python 문자열 찾아 바꾸기(치환) 방법을 살펴보도록 하겠습니다.

Python 문자열 찾아 바꾸기(치환) 방법 개요

보통 str.replace() 메서드 정도만 활용하는 경우가 많은데, 이번 포스팅에서는 다양한 방법을 살펴보도록 하겠습니다.

str.replace()

str.replace() 메서드의 사용법은 다음과 같습니다.

str.replace(oldnew[, count])

파라미터 old 값은 new 값으로 치환할 때 사용하는 메서드입니다. 파라미터 count를 지정하지 않으면 기본적으로 모든 old를 new로 치환하게 됩니다. 하지만 count 파라미터 값을 지정해 주면 count 개수만큼만 치환하고 나머지는 치환하지 않습니다.

코드를 통해서 살펴보겠습니다.

string = "aaaaa"
result1 = string.replace("a", "b")
result2 = string.replace("a", "b", 3)
print(result1)
print(result2)
Python

위의 코드를 실행하면 아래 그림과 같이 result1은 모든 a가 b로 치환된 것을 확인할 수 있으며, result2의 경우에는 앞의 3개의 a가 b로 치환된 것을 확인할 수 있습니다.

그림 1. Python 문자열 찾아 바꾸기: str.replace() 메서드 활용
그림 1. Python 문자열 찾아 바꾸기: str.replace() 메서드 활용

이와 같이 str.replace() 메서드에서는 치환하고자 하는 갯수를 지정할 수 있습니다.

정규식 re.sub() 사용

re.sub() 메서드의 사용법은 다음과 같습니다.

re.sub(patternreplstringcount=0flags=0)

첫째 파라미터 pattern은 찾을 문자열에 대한 패턴입니다. 복잡한 정규식을 사용하지 않고 찾으려는 문자열만 사용해도 됩니다. 둘째 파라미터 repl은 치환할 문자열을 의미합니다. 셋째 파라미터 string은 원본 문자열을 의미합니다. re.sub()에서도 마찬가지로 넷째 파라미터인 count를 지정하면 해당 개수만큼 문자를 치환하게 됩니다. 다섯째 파라미터인 flags를 이용하면 대소문자를 구분하지 않고 매칭되게 할 수도 있습니다.

string = "aAaAaAaAaA"
result1 = re.sub(r"a", "b", string)
result2 = re.sub(r"a", "b", string, count=3)
result3 = re.sub(r"a", "b", string, flags=re.IGNORECASE)
print(result1)
print(result2)
print(result3)
Python

re.sub() 메서드도 str.replace()처럼 치환이 가능합니다. result1을 보면 count를 지정하지 않으면 모두 치환하게 되는 것을 확인할 수 있습니다.

result2의 경우에는 count를 3으로 지정했기 때문에 첫 소문자 3개만 치환됐습니다. 대문자 A는 치환되지 않은 것을 볼 수 있습니다.

마지막으로 result3는 flags 파라미터에 re.IGNORECASE 값을 전달해 주었습니다. 즉, 패턴을 찾을 때 대소문자를 구분하지 않고 찾게 하겠다는 것입니다. 따라서 대소문자 가리지 않고 모든 a와 A를 찾아서 b로 치환했습니다.

그림 2. Python 문자열 찾아 바꾸기: re.sub() 메서드 활용
그림 2. Python 문자열 찾아 바꾸기: re.sub() 메서드 활용

str.maketrans() 및 str.translate() 활용하기

Python에 재미있는 문자열 변환용 메서드가 있습니다.

이 경우는 조금 독특한 방식인데요, 우선 str.maketrans() 메서드를 이용해서 문자열 치환용 테이블을 만듭니다. 그런데 이 경우는 앞서 본 str.replace나 re.sub와는 다릅니다.

문자 하나하나에 대해 다른 문자로 맵핑이 되어 있는 것이 바로 번역 테이블입니다. trans_table을 출력한 것을 보시면 dictionary 형태로 각 문자들이 매핑되어 있는 것을 알 수 있습니다. 즉, w는 h로 치환되며, o는 e로 치환되게 되는 식입니다.

따라서 단순하게 문자열만 찾아서 치환하려고 하는 경우에는 의도와 다른 결과를 가져올 수 있습니다.

str.maketrans() 메서드에 들어가는 파라미터 2개의 길이는 동일해야 번역 테이블을 만들 수 있습니다.

만든 테이블을 이용해서 문자열에 translate() 메서드를 이용하면 각 문자가 치환된 것을 확인할 수 있습니다.

string = "world, w o r l d, d l r o w"
trans_table = str.maketrans("world", "hello")
print(trans_table)
result = string.translate(trans_table)
print(result)
Python

아래 그림은 위의 코드를 실행한 결과입니다.

그림 3. Python 문자열 찾아 바꾸기: str.translate() 메서드 활용
그림 3. Python 문자열 찾아 바꾸기: str.translate() 메서드 활용

보시다시피 문자 하나하나에 대응해서 해당하는 문자는 모두 바꾸기 때문에 주의해서 사용해야 합니다.

관련 자료

Python 정규식 페이지Built-in Types 페이지를 참고했습니다.

같이 읽으면 좋은 글

Leave a Comment