Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python 문자열에서 모든 구두점을 제거하는 3가지 방법

Python 문자열에서 모든 구두점 제거하기

Python에서 문자열에 포함된 마침표, 쉼표, 물음표 같은 구두점을 제거해야 하는 경우가 자주 있습니다. 텍스트 데이터를 전처리하거나 검색 기능을 구현할 때 특히 유용한데요. 이 글에서는 상황에 맞게 선택할 수 있는 세 가지 방법을 소개합니다.

방법 1. str.translate() 사용 – 가장 빠른 방법

모든 구두점을 제거하는 가장 빠른 방법은 str.translate() 메서드를 사용하는 것입니다. 내부적으로 C 언어 수준에서 처리되기 때문에 대량의 텍스트를 다룰 때 뛰어난 성능을 발휘합니다.

import string

s = "string. With. Punctuation?"
result = s.translate(str.maketrans('', '', string.punctuation))
print(result)

실행 결과:

string With Punctuation

string.punctuation은 아래와 같이 ASCII 구두점 전체를 담고 있는 상수입니다.

!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~

방법 2. 집합(set)과 반복문 활용 – 가독성이 좋은 방법

코드의 의도를 더 명확하게 드러내고 싶다면, 구두점 문자들을 집합으로 만든 뒤 반복문에서 해당 문자들을 제외하는 방식을 사용할 수 있습니다.

import string

s = "string. With. Punctuation?"
exclude = set(string.punctuation)
result = ''.join(ch for ch in s if ch not in exclude)
print(result)

실행 결과:

string With Punctuation

집합(set)은 해시 기반으로 동작해 멤버십 검사 속도가 O(1)이므로, 리스트를 사용하는 것보다 훨씬 효율적입니다.

방법 3. 정규표현식(re) 활용

정규표현식에 익숙하다면 re.sub()를 사용해 한 줄로 간단하게 처리할 수도 있습니다.

import re

s = "string. With. Punctuation?"
result = re.sub(r'[^\w\s]', '', s)
print(result)

패턴 [^\w\s]는 '단어 문자(\w)와 공백(\s)이 아닌 모든 문자', 즉 구두점에 해당하는 문자만 찾아 제거합니다.

어떤 방법을 선택해야 할까?

  • 성능이 중요한 경우: str.translate()가 가장 빠릅니다.
  • 가독성이 중요한 경우: 집합과 반복문을 조합한 방법이 가장 직관적입니다.
  • 유연한 패턴 처리가 필요한 경우: 정규표현식이 적합합니다.

참고로 위 예제는 Python 3 기준으로 작성되었습니다. Python 2에서는 s.translate(None, string.punctuation)처럼 삭제할 문자를 두 번째 인자로 직접 지정했지만, Python 3부터는 str.maketrans()로 변환 테이블을 생성해 전달해야 한다는 점에 유의하세요.