Python에서 문자열에 포함된 자음만 골라서 삭제해야 하는 경우가 종종 있습니다. 이 문제는 정규 표현식(regular expression)을 활용하면 가장 간단하게 해결할 수 있습니다. 여러 개의 문자를 |로 구분하여 연결한 뒤, re.sub() 함수를 사용하면 해당 문자들을 한 번에 치환할 수 있습니다.
1. 정규 표현식과 re.sub() 활용하기
자음 목록을 리스트로 만들고, 이를 |로 조인한 패턴으로 치환하는 기본적인 예제입니다.
>>> import re
>>> consonants = ['b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z']
>>> re.sub('|'.join(consonants), "", "Hello people", flags=re.IGNORECASE)
'eo eoe'
참고: 정규 표현식에서 대괄호 []를 사용하면 치환할 문자 그룹을 더 간결하게 만들 수 있습니다.
2. 모음만 남기는 간단한 방법
자음 목록을 일일이 나열하는 대신, 모음이 아닌 모든 문자를 제거하는 방식도 가능합니다. 다만 이 방법은 공백, 숫자 등 자음 외의 다른 문자들까지 함께 삭제된다는 점에 유의해야 합니다.
>>> import re
>>> re.sub('[^aeiou]', "", "Hello people", flags=re.IGNORECASE)
'eoeoe'
두 방식의 차이점
- 첫 번째 방법: 지정한 자음만 제거되므로 공백과 같은 다른 문자는 그대로 유지됩니다.
- 두 번째 방법: 모음을 제외한 모든 문자가 제거되므로 결과가 더 짧아집니다.
3. 필터링 방식으로 자음 걸러내기
정규 표현식 없이 제너레이터 표현식과 join()을 조합하여 자음을 필터링할 수도 있습니다. 이 방식은 코드가 직관적이라 가독성이 좋습니다.
>>> consonants = ['b', 'c', 'd', 'f', 'g', 'h', 'j', 'k', 'l', 'm', 'n', 'p', 'q', 'r', 's', 't', 'v', 'w', 'x', 'y', 'z']
>>> s = "Hello people"
>>> ''.join(c for c in s if c.lower() not in consonants)
'eo eoe'
여기서 c.lower()를 사용하면 대문자와 소문자를 모두 처리할 수 있어, 별도로 re.IGNORECASE 플래그를 쓰지 않아도 됩니다.
마무리
정리하면, Python에서 문자열의 자음을 제거하는 방법은 크게 세 가지입니다. re.sub()에 자음 패턴을 넣는 방법, 모음만 남기는 부정 문자 클래스를 활용하는 방법, 그리고 반복문과 조건문으로 필터링하는 방법입니다. 상황에 따라 공백 유지 여부나 코드 가독성을 고려하여 적절한 방법을 선택하시면 됩니다.