데이터의 지도를 그리는 기술, 파이썬 정규 표현식(Regex) 완전 정복
IT 개발이나 데이터 분석을 하다 보면 방대한 텍스트 데이터 속에서 특정 패턴만 골라내야 하는 상황을 마주하게 됩니다. 이때 가장 강력한 무기가 바로 **정규 표현식(Regular Expression)**입니다. 복잡해 보이지만 한 번 익혀두면 수백 줄의 코드를 단 몇 줄로 줄여주는 정규 표현식의 핵심 내용을 정리해 드립니다.
패턴의 뼈대, 특수 문자와 메타 문자
정규 표현식에서 특수 문자는 검색하고자 하는 문자열의 '규칙'을 정의합니다. 단순히 글자 자체를 찾는 것이 아니라, 위치나 반복 횟수 등을 지정하는 역할을 합니다.
| 특수문자 | 설명 | 예시 |
|---|---|---|
| . | 임의의 한 문자 (줄바꿈 \n 제외) | a.b -> acb, a1b, a!b 등 |
| ? | 앞 문자가 0개 또는 1개 존재 | apple? -> appl, apple |
| * | 앞 문자가 0개 이상 무한 반복 | ab*c -> ac, abc, abbc, abbbc 등 |
| + | 앞 문자가 최소 1개 이상 존재 | ab+c -> abc, abbc (ac는 제외) |
| ^ | 문자열의 시작을 의미 | ^Hello -> Hello로 시작하는 문장만 매치 |
| **$** | 문자열의 끝을 의미 | done$-> done으로 끝나는 문장만 매치 |
더 짧고 강력하게, 문자 규칙(Shorthand)
자주 사용되는 문자 집합은 역슬래시(\)를 이용한 약속된 기호로 더 간결하게 표현할 수 있습니다.
- \d: 모든 숫자와 매치됩니다.
[0-9]와 동일한 의미를 가집니다. - \D: 숫자를 제외한 모든 문자와 매치됩니다.
[^0-9]와 동일합니다. - \s: 공백 문자(스페이스, 탭, 줄바꿈 등)를 의미합니다.
- \S: 공백을 제외한 모든 문자를 의미합니다.
- \w: 알파벳 대소문자, 숫자, 언더바(_)를 포함합니다.
[a-zA-Z0-9_]와 같습니다. - \W: 문자나 숫자가 아닌 특수문자 등을 의미합니다.
파이썬 re 모듈 주요 함수 활용법
파이썬에서는 re 모듈을 통해 정규 표현식을 사용합니다. 각 함수의 특성을 이해하면 상황에 맞는 데이터 추출이 가능합니다.
| 함수 | 설명 | 활용 예시 |
|---|---|---|
| re.compile() | 패턴을 미리 컴파일 | 동일 패턴을 반복해서 사용할 때 속도 향상 |
| re.search() | 문자열 전체에서 매치 검색 | 문장 중간에 숨어있는 패턴을 찾을 때 |
| re.match() | 문자열 시작부터 매치 확인 | 입력값이 특정 형식을 지키는지 검사할 때 |
| re.findall() | 매치되는 모든 문자열을 리스트로 리턴 | 텍스트 내의 모든 이메일 주소를 수집할 때 |
| re.sub() | 일치하는 부분을 다른 문자로 대체 | 데이터 정제 및 비식별화(마스킹) 처리할 때 |
| re.split() | 패턴을 기준으로 문자열 분리 | 복잡한 구분자가 섞인 텍스트를 나눌 때 |
실전 예시: 정규 표현식으로 데이터 걸러내기
이론보다 중요한 것은 실전 적용입니다. 파이썬 코드로 어떻게 활용되는지 확인해 보세요.
import re
# 1. 숫자만 골라내기
text = "제 번호는 010-1234-5678입니다."
numbers = re.findall(r'\d+', text)
# 결과: ['010', '1234', '5678']
# 2. 이메일 형식 검사하기
email_pattern = re.compile(r'^[a-zA-Z0-9+-_.]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$')
is_valid = email_pattern.match("user@example.com")
# 결과: 매치 객체 리턴 (True 효과)
# 3. 특정 문자 제거(정제)
dirty_text = "안녕하세요!!! 반가워요...???"
clean_text = re.sub(r'[!?.]', '', dirty_text)
# 결과: "안녕하세요 반가워요"'AI Tech' 카테고리의 다른 글
| 복잡한 문자열의 지도로 불리는 '정규 표현식(Regex)' 완벽 정리 (0) | 2026.02.26 |
|---|---|
| 내 코드를 클라우드로, 깃(Git)에 프로젝트 소스 올리는 법 (0) | 2026.02.26 |
| 파이썬 가상환경의 핵심, requirements.txt 완벽 가이드 (0) | 2026.02.26 |
| AI와 외부 데이터의 연결 고리, MCP(Model Context Protocol) (0) | 2026.02.19 |
| pandas의 pivot, pivot_table, groupby 비교 (0) | 2026.02.09 |