수만 줄에 달하는 고객 상담 로그, 서버 기록, 혹은 텍스트 문서 안에서 특정 이메일 주소나 전화번호만 골라내어 명부를 정리해야 하는 상황을 마주할 때가 있습니다. 일반적인 텍스트 검색(Ctrl+F) 기능으로는 단어 하나는 찾을 수 있지만, ‘특정 형식을 가진 데이터 전체’를 한 번에 추출하는 것은 불가능합니다. 이때 구원투수가 되는 기술이 바로 ‘정규표현식(Regular Expression, 줄여서 Regex)’입니다. 파이썬의 표준 내장 모듈을 활용하면 아무리 복잡하게 뒤섞인 텍스트 파일이라도 내가 원하는 데이터 포맷만 핀셋으로 뽑아내듯 자동 정제할 수 있습니다.
비정형 텍스트 문서 내에서 필요한 핵심 정보만 정제하기
파이썬 re 모듈의 주요 패턴 분석 방법
정규표현식은 특정한 규칙을 가진 문자열의 집합을 표현하는 일종의 ‘기호 약속’입니다. 파이썬에서는 외부 패키지 설치 없이 import re 명령만으로 강력한 정규표현식 엔진을 사용할 수 있습니다.
핵심이 되는 기호를 살펴보면, 숫자는 \d, 문자는 \w로 표현하며, 반복되는 횟수는 중괄호{}나 플러스+ 기호를 사용해 지정합니다. 예를 들어 휴대폰 번호 형식(010-XXXX-XXXX)은 \d{3}-\d{4}-\d{4}라는 정규식 패턴으로 완벽하게 표현할 수 있습니다. 처음에는 이 기호들이 외계어처럼 복잡해 보이지만, 일정한 규칙성을 이해하고 나면 텍스트를 다루는 가장 강력한 업무 무기가 됩니다.
대용량 로그/텍스트에서 이메일 주소만 필터링하는 스크립트
정규식 기반 데이터 자동 추출 코드 구현
메모장 파일(.txt)을 읽어와 내부에 무작위로 숨겨져 있는 한국형 휴대폰 번호와 표준 이메일 주소를 정확하게 찾아내어 리스트로 정렬해 주는 전체 파이썬 스크립트 코드입니다.
Python
import re
def extract_contact_info(file_path):
try:
# 텍스트 파일 안전하게 읽기
with open(file_path, 'r', encoding='utf-8') as file:
content = file.read()
except Exception as e:
print(f"파일을 읽는 중 오류가 발생했습니다: {e}")
return
# 1. 대한민국 휴대폰 번호 정규식 패턴 (예: 010-1234-5678)
phone_pattern = r'01\d-\d{3,4}-\d{4}'
# 2. 일반적인 이메일 주소 정규식 패턴 (예: user@example.com)
email_pattern = r'[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}'
# re.findall() 함수를 사용해 텍스트 전체에서 패턴과 일치하는 모든 데이터를 추출
phones = re.findall(phone_pattern, content)
emails = re.findall(email_pattern, content)
# 중복된 데이터가 있을 경우를 대비해 set을 활용한 중복 제거 및 정렬
unique_phones = sorted(list(set(phones)))
unique_emails = sorted(list(set(emails)))
print("--- 텍스트 데이터 자동 추출 결과 ---")
print(f"\n[발견된 휴대폰 번호 목록: 총 {len(unique_phones)}개]")
for phone in unique_phones:
print(f"- {phone}")
print(f"\n[발견된 이메일 주소 목록: 총 {len(unique_emails)}개]")
for email in unique_emails:
print(f"- {email}")
# 분석할 대상 텍스트 파일 경로 설정
target_file_path = r"C:\Your\Text\File\customer_log.txt"
if __name__ == "__main__":
extract_contact_info(target_file_path)
이 코드는 re.findall() 메커니즘을 핵심으로 구동됩니다. 이 함수는 텍스트 문서의 첫 줄부터 마지막 줄까지 고속으로 스캔하며 패턴 일치 여부를 검사합니다. 특히 이메일 정규식 패턴인 [a-zA-Z0-9._%+-]+ 부분은 아이디 영역에 들어갈 수 있는 영문, 숫자, 특수문자 조합을 선별하고, @[a-zA-Z0-9.-]+\.[a-zA-Z]{2,} 구문을 통해 도메인 주소 형식까지 엄격하게 필터링하여 오탐지율을 최소화합니다. 하단의 경로 변수에 정제가 필요한 원본 텍스트 파일 경로를 넣고 스크립트를 구동하면, 수만 줄의 찌꺼기 텍스트 속에서 유효한 연락처 정보만 깔끔하게 정제된 마스터 리스트를 즉시 확보할 수 있습니다.