
개요
데이터의 홍수 속에서 내가 원하는 특정 형태의 텍스트만 골라내는 능력은 개발자의 핵심 역량이다. 정규표현식(Regular Expression)은 단순한 문자열 검색을 넘어, 복잡한 규칙을 '패턴'으로 정의하여 데이터를 추출하고 가공하는 도구이다. 오늘은 그 첫 번째 시간으로 정규표현식의 기초 설계 원리와 파이썬 re 모듈의 기본 사용법을 자세히 알아본다.
1. 정규표현식의 핵심: 메타 문자 이해하기
정규표현식은 특수 기호인 '메타 문자'를 조합해 패턴을 만든다. 기초 단계에서 반드시 알아야 할 기호들을 예시와 함께 살펴본다.
1.1. 문자 클래스와 범위 지정 (Character Classes)
대괄호 []를 사용하여 매칭할 문자의 집합이나 범위를 정의한다.
[a-z]: 알파벳 소문자 중 한 글자[A-Z]: 알파벳 대문자 중 한 글자[0-9]: 숫자 0부터 9 중 한 글자
import re
# 예제: 'p'로 시작하고 뒤에 'a', 'b', 'c' 중 하나가 오는 패턴
print(re.findall(r"p[abc]", "pa pb pc pd")) # ['pa', 'pb', 'pc']
1.2. 축약형 기호 (Shorthand)
자주 쓰이는 범위를 역슬래시(\)를 이용해 간단히 표현한다.
\d: 숫자와 매칭 ([0-9]와 동일)\w: 영문, 숫자, 언더바와 매칭 ([a-zA-Z0-9_]와 동일)\s: 공백 문자(띄어쓰기, 탭 등)와 매칭
# 예제: 숫자와 공백이 번갈아 나오는 패턴
print(re.findall(r"\d\s\d", "1 2 34 5")) # ['1 2', '4 5']
1.3. 위치 지정자 (Anchors)
패턴이 나타나는 위치(시작/끝)를 고정한다.
^: 문자열의 시작 지점 고정$: 문자열의 끝 지점 고정
# 예제: 'Python'으로 시작하는지 확인
print(re.match(r"^Python", "Python is easy")) # Match 객체 반환
print(re.match(r"^Python", "I love Python")) # None 반환
1.4. 수량자: + (One or More)
\w나 \d 뒤에 붙어 해당 패턴이 1번 이상 반복됨을 의미한다. 파일명이나 아이디와 같은 '단어 덩어리'를 잡을 때 필수적이다.
# 예제: 단어 덩어리(\w+)와 점(\.) 그리고 확장자 매칭
img_pattern = r"\w+\.jpg$"
print(re.search(img_pattern, "photo_01.jpg")) # 매칭 성공 ('photo_01' 전체를 잡음)
2. 파이썬 re 모듈의 핵심 함수
파이썬 re 모듈에서 제공하는 주요 함수들의 차이를 명확히 알아야 한다.
3. 실무 팁: re.compile()과 리터럴 패턴
정규표현식이라고 해서 반드시 \d나 \w 같은 기호가 들어가야 하는 것은 아니다. 가장 기초적인 패턴은 우리가 찾는 일반 문자열 그 자체인 '리터럴(Literal) 패턴'이다.
3.1. 일반 문자열도 패턴이다
re.compile(r'Python')은 "문자열 내에서 정확히 'Python'이라는 글자 배열을 찾아라"라는 규칙을 정규표현식 객체로 만드는 과정이다.
- 왜 그냥
in연산자를 안 쓰나요?: 정규표현식 객체로 만들면 단어의 시작/끝 위치(start,end)를 정확히 알 수 있고, 나중에r'Pyth.n'처럼 패턴을 확장하기 매우 유리하기 때문이다.
import re
target = "Python is easy. Python is powerful."
# 'Python'이라는 리터럴 패턴을 컴파일 (가장 기초적인 정규표현식)
p = re.compile(r'Python')
# finditer로 모든 위치 정보를 출력
results = p.finditer(target)
for r in results:
print(f"매칭 단어: {r.group()}, 위치: {r.start()}~{r.end()}")
# 결과: 매칭 단어: Python, 위치: 0~6
# 결과: 매칭 단어: Python, 위치: 16~22
4. 결론
텍스트 처리의 기초 체력
정규표현식은 기본 메타 문자와 수량자의 조합을 이해하는 것에서 시작한다. 오늘 다룬 `\d`, `\w`, `^`, `$` 그리고 `+`의 원리만 정확히 파악해도 실무 데이터의 절반 이상을 자유롭게 다룰 수 있다.
'Dev > Python' 카테고리의 다른 글
| 파이썬 심화 : 정규표현식(Regex)의 심화 (0) | 2026.01.27 |
|---|---|
| 파이썬 중급 : 리스트 컴프리헨션(List Comprehension) (0) | 2026.01.26 |
| 파이썬 기초: 데이터 처리의 핵심, '문자열(String) 조작법' (0) | 2026.01.21 |
| 파이썬 심화: 클래스를 만드는 클래스, '메타클래스(Metaclass)' (0) | 2026.01.20 |
| 파이썬 중급: 클로저(Closure) 정리 (0) | 2026.01.19 |