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()로 변환 테이블을 생성해 전달해야 한다는 점에 유의하세요.