본문 바로가기
Dev/Python

파이썬 심화: 텍스트의 완성, '정규표현식(Regex)'의 기초

by DevGyu0511 2026. 1. 22.
반응형

정규표현식

개요

데이터의 홍수 속에서 내가 원하는 특정 형태의 텍스트만 골라내는 능력은 개발자의 핵심 역량이다. 정규표현식(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 모듈에서 제공하는 주요 함수들의 차이를 명확히 알아야 한다.

함수 (Function) 설명 (Description) 매칭 범위
match() 문자열의 시작부터 일치 여부 검사 문장 앞단
search() 문자열 전체에서 첫 번째 일치 항목 탐색 문장 전체
findall() 일치하는 모든 항목을 리스트로 반환 다중 매칭
finditer() 모든 매칭 항목을 반복 가능한 객체로 반환 반복문 전용

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`, `^`, `$` 그리고 `+`의 원리만 정확히 파악해도 실무 데이터의 절반 이상을 자유롭게 다룰 수 있다.

반응형