Python을 사용하여 문자열의 문자를 바꾸는 방법

본 튜토리얼에서는 파이썬 문자열 내의 특정 문자들을 변경하는 여러 가지 방법을 소개합니다. 여기에는 내장 문자열 메소드와 정규 표현식 등이 포함됩니다.

파이썬에서 문자열은 유니코드 문자들을 연속적으로 저장하는 구조입니다. 리스트나 딕셔너리와는 다르게, 문자열은 그 내용이 변경 불가능합니다. 즉, 기존의 문자열을 직접 수정하는 것은 허용되지 않습니다.

그럼에도 불구하고 문자열 작업을 하다 보면, 앞뒤 공백을 제거하거나, 대소문자를 변경하거나, 특정 문자를 다른 문자로 바꾸는 등의 문자열 조작이 필요한 경우가 있습니다.

그렇다면 파이썬에서 문자열을 어떻게 다루어야 할까요? 또, 문자열 내의 특정 문자를 변경하는 방법은 무엇일까요? 이 튜토리얼에서는 이러한 질문에 대한 답을 제공하고자 하며, 다음 사항을 중점적으로 다룰 것입니다:

  • 파이썬 문자열의 불변성
  • 문자열 조작에 사용되는 파이썬 문자열 메소드
  • 문자열 내 문자를 변경하는 다양한 접근 방식

이제 시작해보겠습니다.

파이썬 문자열의 불변성

앞서 언급했듯이, 파이썬 문자열은 변경이 불가능합니다. 따라서 기존 문자열의 내용을 직접 수정할 수는 없습니다. 기존 문자열의 변경은 허용되지 않습니다.

예를 들어, “Python 프로그래밍!”이라는 문자열을 예시로 들어보겠습니다.

인덱스와 슬라이스를 사용하여 문자열의 특정 위치 또는 부분을 참조할 수 있습니다. 시작 및 끝 인덱스를 지정하여 부분 문자열을 추출할 수도 있습니다.

>>> my_str = "Python programming!"
>>> my_str[0]
'P'
>>> my_str[4]
'o'
>>> my_str[1:9]
'ython pr'
>>> my_str[9]
'o'

만약 문자 ‘o’를 숫자 ‘0’으로 변경하고 싶다면 어떻게 해야 할까요?

인덱스 4와 9에 ‘o’가 위치한다는 것을 알 수 있습니다. 하지만 아래와 같이 특정 인덱스의 문자를 ‘0’으로 직접 변경하려 하면 오류가 발생합니다.

>>> my_str[4] = '0'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

파이썬은 기존 문자열을 기반으로 변경 사항이 적용된 새로운 문자열을 생성하는 다양한 문자열 메소드를 제공합니다.

더 알아보기: 문자열 연산에 대한 파이썬 프로그램.

문자열 메소드와 리스트 컴프리헨션, 루프, 정규 표현식 등을 조합하여 문자열 조작 작업을 수행할 수 있습니다. 이 튜토리얼에서는 파이썬 문자열에서 문자를 바꾸는 여러 가지 방법을 탐색합니다.

파이썬 문자열에서 문자 바꾸기

파이썬 문자열에서 특정 문자나 하위 문자열을 대체해야 하는 여러 상황이 있습니다. 몇 가지 예시는 다음과 같습니다:

  • 텍스트 정리: 텍스트 데이터를 처리할 때, 불필요한 문자를 제거하거나 특정 문자를 다른 문자로 변경해야 할 수 있습니다. 예를 들어, 특수 문자, 과도한 공백, 또는 원치 않는 기호를 제거하거나 교체할 수 있습니다.
  • 서식 변경: 텍스트 서식을 변경하여 대문자 또는 소문자로 변환하는 등 다양한 작업을 수행할 수 있습니다. 예를 들어, 제목이나 표제에서 일관된 대문자 사용을 보장할 수 있습니다.
  • 데이터 마스킹: 개인 식별 번호나 신용 카드 번호와 같은 민감한 정보를 마스킹하여 형식을 유지하면서 데이터를 보호해야 할 때가 있습니다.
  • URL 및 경로 처리: URL이나 파일 경로를 처리할 때, 웹 브라우저나 파일 시스템과 호환되도록 특정 문자를 변경해야 할 수 있습니다.

문자열에서 문자를 바꾸는 간단한 예시를 먼저 살펴본 후, 더 효율적인 방법들을 논의해보겠습니다.

“Python 프로그래밍!” 문자열에서 ‘o’를 ‘0’으로 바꾸는 과정을 예시로 사용하겠습니다.

for 루프를 사용하여 문자열을 순회하고, 조건문을 사용하여 특정 문자를 바꾸는 방법을 살펴보겠습니다.

original_string = "Python programming!"
new_string = ""
for char in original_string:
    if char == "o":
        new_string += "0"
    else:
        new_string += char
print(new_string)

이 방법은 문자열의 각 문자를 하나씩 확인하여, 문자가 ‘o’이면 ‘0’으로 변경하고, 그렇지 않으면 원래 문자를 그대로 유지하여 새로운 문자열을 만듭니다.

# 결과
Pyth0n pr0gramming!

for 루프와 if 문을 사용하는 방식은 특히 하위 문자열을 바꾸거나 여러 문자를 변경해야 할 때 유지 보수가 어려울 수 있습니다.

더 효과적인 문자 또는 하위 문자열 변경 방법이 존재하며, 다음 섹션에서 이에 대해 알아보겠습니다.

#1. str.replace() 사용

문자열 메소드인 replace()를 사용하여 특정 문자나 하위 문자열을 다른 문자열로 바꿀 수 있습니다. str.replace(old, new)는 이전 문자나 하위 문자열을 새 문자나 부분 문자열로 대체합니다.

여기서는 replace() 메소드를 사용하여 문자 ‘o’를 숫자 ‘0’으로 변경합니다.

original_string = "Python programming!"
new_string = original_string.replace("o", "0")
print(new_string)

변경 결과는 new_string에 저장됩니다.

# 결과
Pyth0n pr0gramming!

#2. 리스트 컴프리헨션과 join() 메소드 사용

파이썬 문자열의 문자를 변경하기 위해 리스트 컴프리헨션과 문자열 메소드인 join()을 함께 사용할 수 있습니다.

이 방법을 사용하여 위의 예제를 어떻게 다시 작성할 수 있는지 살펴보겠습니다.

  • 리스트 컴프리헨션을 사용하여 original_string의 각 문자를 순회합니다. 문자가 ‘o’라면 ‘0’으로 바꾸고, 그렇지 않으면 원래 문자를 그대로 유지합니다.
  • 그리고 나서 str.join()을 사용하여 이렇게 변환된 문자들을 연결하여 new_string을 생성합니다. 이 방법은 문자열에서 단일 문자를 바꿀 때 반복문과 조건문을 사용하는 것보다 훨씬 간결합니다.
original_string = "Python programming!"
new_string = ''.join(['0' if char == 'o' else char for char in original_string])
print(new_string)

예상되는 결과는 다음과 같습니다.

# 결과
Pyth0n pr0gramming!

#3. 정규 표현식 사용

파이썬 문자열에서 문자를 바꾸는 또 다른 방법은 정규 표현식을 사용하는 것입니다. 파이썬은 정규 표현식 매칭 작업을 위한 내장 모듈인 re를 제공합니다. 정규 표현식을 사용하여 검색할 패턴, 검색 대상 문자열, 그리고 매칭된 패턴을 대체할 문자열을 지정할 수 있습니다.

여기서는 re 모듈의 sub() 함수를 re.sub(pattern, replacement, string) 구문과 함께 사용합니다.

import re

original_string = "Python programming!"
new_string = re.sub(r'o', '0', original_string)
print(new_string)

패턴 r'o'original_string에서 문자 ‘o’의 모든 출현과 일치하고, 이를 ‘0’으로 대체합니다.

# 결과
Pyth0n pr0gramming!

정규 표현식을 사용하여 더 복잡한 패턴을 일치시킬 수도 있습니다. 예를 들어 신용 카드 번호를 마스킹하는 경우를 살펴보겠습니다. 마지막 네 자리를 제외한 모든 숫자를 ‘X’로 바꾸고 싶다고 가정해 봅시다. 그 방법은 다음과 같습니다.

import re

def mask_credit_card(card_number):
    # 정규 표현식을 사용하여 문자 매칭 및 대체
    masked_number = re.sub(r'\d(?=\d{4})', 'X', card_number)
    return masked_number

# 사용 예시:
credit_card_number = "1234567898765432"
masked_number = mask_credit_card(credit_card_number)
print(masked_number)

결과는 다음과 같습니다.

# 결과
XXXXXXXXXXXX5432

정규 표현식을 단순하게 유지하기 위해 하이픈을 제외했지만, 필요에 따라 예시를 수정할 수 있습니다.

#4. str.maketrans()str.translate() 사용

파이썬의 str.maketrans()str.translate() 메소드는 문자열 내에서 문자 수준의 변환 및 대체를 수행하는 데 사용됩니다.

str.maketrans() 작동 방식

maketrans() 메소드는 문자열에서 문자를 바꾸는 방법을 정의하는 변환 테이블을 생성하는 데 사용됩니다. 이는 str.maketrans(x, y) 구문과 함께 사용할 수 있습니다. 여기에서:

  • x는 바꾸려는 문자를 포함하는 문자열입니다.
  • yx를 대체할 문자를 포함하는 문자열입니다.

maketrans() 메소드는 x에서 y로의 매핑을 기반으로 변환 테이블을 생성합니다. 그런 다음 이 변환 테이블을 str.translate() 메소드와 함께 사용하여 실제 대체를 수행할 수 있습니다.

str.translate() 작동 방식

str.translate() 메소드를 사용하여 str.maketrans()에서 생성된 변환 테이블을 문자열에 적용할 수 있습니다. 변환 테이블에 정의된 매핑에 따라 문자별로 대체를 수행합니다. 지정된 문자 대체가 적용된 새 문자열을 반환합니다.

translate() 메소드의 사용법은 다음과 같습니다.

new_string = original_string.translate(translation_table)
  • original_string: 수정하려는 입력 문자열입니다.
  • translation_table: 문자 매핑을 정의하는 str.maketrans()를 사용하여 생성된 변환 테이블입니다.

maketrans()str.translate() 메소드를 결합하여 예제를 다시 작성해 보겠습니다.

original_string = "Python programming!"
translation_table = str.maketrans('o', '0')
new_string = original_string.translate(translation_table)
print(new_string)

여기서는 str.maketrans('o', '0')을 사용하여 변환 테이블을 생성합니다. 이는 문자 ‘o’를 ‘0’으로 바꾸어야 한다는 것을 의미합니다. 그런 다음 original_string에 대해 translate() 메소드를 사용하여 이 변환을 적용하고, 결과적으로 new_string이 생성됩니다.

# 결과
Pyth0n pr0gramming!

이러한 메소드는 문자열에서 문자를 바꾸거나 다른 문자 수준의 조작을 수행할 때 유용합니다.

결론

우리가 배운 내용을 다시 정리해 봅시다.

파이썬 문자열은 변경할 수 없습니다. 따라서 파이썬 문자열에서 문자를 바꾸려는 경우, 특정 인덱스의 문자를 직접 재할당할 수는 없습니다. 파이썬 문자열에서 하나 또는 여러 문자를 바꾸기 위해 다음 접근 방식을 살펴보았습니다.

  • str.replace(old, new)를 사용하여 old의 모든 인스턴스를 새로운 하위 문자열로 대체합니다.
  • 리스트 컴프리헨션과 join() 메소드를 사용할 수도 있습니다. 리스트 컴프리헨션을 사용하여 문자 변경을 수행하고 join() 메소드를 사용하여 문자 리스트를 문자열로 결합합니다.
  • 정규 표현식 및 패턴 매칭을 사용하여 문자 또는 패턴이 나타나는 곳을 바꿀 수 있습니다. re.sub(pattern, replacement, string)과 함께 sub() 함수를 사용하세요.
  • 변환 테이블을 얻으려면 str.maketrans()를 사용하고, 변환 테이블을 원본 문자열에 적용하려면 translate() 메소드를 사용하세요.

이러한 기술을 더욱 잘 이해하려면 몇 가지 예제를 직접 코딩해 보세요. 다음으로 파이썬 문자열에서 마지막 문자를 제거하는 방법을 알아보세요.