- 클로저와 스코프
Chapter 9. 정규표현식과 텍스트 처리
파이썬 중급 개발자에게 텍스트 데이터는 일상의 과업이다. 방대한 로그, 이메일, 전화번호 또는 패턴이 다양한 문서들 속에서 필요한 정보를 정확하게 추출해야 할 때, 정규표현식(Regular Expressions)과 re 모듈이 핵심 도구다.
re 모듈의 시작
파이썬 표준 라이브러리인 re 모듈은 정규표현식을 활용해 문자열 내에서 세밀한 검색, 치환, 분리 작업을 척척 해낸다. 먼저 re 모듈을 import하고, 사용할 패턴을 명시하는 것으로 본격적인 텍스트 처리의 문이 열린다.
정규표현식은 오랜 시간 다양한 언어에서 쓰여온 만큼, 파이썬만의 독특한 문법은 아니다. 그러나 파이썬의 직관적인 스타일과 만나며, 이메일/전화번호 추출부터 로그 분석, 데이터 클렌징 같은 업무에 탁월한 유연성을 보여준다.
주요 함수와 패턴 사용
가장 자주 쓰는 re 함수는 다음과 같다: match()
, search()
, findall()
, sub()
. match는 문자열 앞부분에서 패턴과 일치하는지를, search는 전체 문자열에서 패턴 일치 여부를 확인한다. findall은 일치하는 모든 조각을 리스트로, sub는 원하는 텍스트로 대체한다.
예를 들어, 이메일을 찾는다면:
import re
pattern = r"[\w.-]+@[\w.-]+\.\w+"
emails = re.findall(pattern, text)
정규표현식 패턴에는 특수문자와 반복 기호가 필수다. ^
와 $
는 문자열의 시작, 끝, .
는 임의 문자, *
, +
, ?
는 반복 횟수 제어에 사용된다. 대괄호 []
로 문자 집합을, 이스케이프 \
로 특수문자를 일반 문자처럼 다룬다. 이 작은 기호들이 조합되면, 복잡한 텍스트도 논리적으로 해체된다.
텍스트 처리의 실전 예제
정규표현식과 re 모듈은 파일에서 특정 행만 걸러내거나, 로그에서 숫자 추출, HTML 태그 제거, 데이터 집계 등 다양한 실무 상황에서 활용된다. 긴 문장이나 대량 문서에서도 빠르게 원하는 정보를 뽑아낼 수 있어, 수작업의 한계를 극복한다.
예를 들어 특정 숫자를 모두 추출하고자 한다면:
import re
numbers = re.findall(r"\d+", text)
이렇게 정규표현식에 익숙해지면 이메일 주소, 날짜, 주민등록번호, 웹 주소 파싱 등도 간단히 처리할 수 있다. 심지어 패턴을 컴파일하여 여러 번 반복 검색할 때 성능도 개선된다.
패턴 매칭의 유연함
정규표현식이 제공하는 패턴 언어는 마치 연주자의 손끝과 같다. 간단한 조건부터 복잡한 규칙까지 한 줄의 패턴으로 정의 가능하다. 텍스트 정규화, 불필요한 공백/특수문자 제거, 데이터 클렌징에서 이 강력함이 빛을 발한다.
무엇보다 re 모듈과 정규식은 파이썬 텍스트 처리의 시작점이다. 처음에는 암호 같던 기호들의 의미를 하나씩 익혀 나가면서, 점차 복잡하고 큰 프로젝트에서도 자유롭게 문자열을 다루게 된다. 결국, 능숙한 텍스트 처리야말로 파이썬 중급자의 가장 든든한 무기다.