C.W.K.
Stream
Lesson 03 of 10 · published

Python re.compile() 와 re.VERBOSE

~8 min · python, compile, verbose

Level 0패턴 호기심
0 XP0/90 lessons0/15 achievements
0/100 XP to next level100 XP to go0% complete

재사용할 패턴 컴파일

re.compile(pattern) 이 같은 메서드들 (.search, .findall, .sub 등) 다 가진 Pattern 객체 반환, but 매번 호출에 파싱 단계 스킵. 루프 또는 함수 가로질러 반복 사용 패턴엔 컴파일이 더 빠름.

Python 이 사실 컴파일된 패턴 자동 캐싱 (마지막 몇 unique). But 명시 컴파일이 더 명확한 코드, 캐시 상태 무관 보장.

VERBOSE 플래그

re.VERBOSE (alias re.X) 가 공백과 주석 있는 멀티라인 패턴 작성 가능. 패턴 안:

  • 공백 무시 (리터럴 공백엔 \s, \ , character class).
  • # 가 줄 끝까지 주석 시작.

가독 안 되는 정규식의 치료. ~30 자 넘는 패턴은 다 이득.

플래그 결합

플래그를 | 로 결합: re.compile(pattern, re.VERBOSE | re.MULTILINE | re.IGNORECASE).

Inline 플래그

대안으로 패턴 시작에 (?flags) 로 플래그 설정: 시작의 (?ix) 가 전체 패턴에 IGNORECASE 와 VERBOSE 활성. Scoped (?ix:...) 로도 섹션에 동작.

Code

Compile 과 verbose·python
import re

# 재사용 가능한 컴파일된 패턴
EMAIL = re.compile(r'[\w.+-]+@[\w-]+\.[\w.-]+')

for line in lines:
    for match in EMAIL.finditer(line):
        print(match.group())

# 가독 위한 verbose 모드
DATE = re.compile(r'''
    (?P<year>\d{4})    # 4 자리 연도
    -
    (?P<month>\d{2})   # 2 자리 월
    -
    (?P<day>\d{2})     # 2 자리 일
''', re.VERBOSE)

m = DATE.match('2026-05-04')
print(m.groupdict())
# {'year': '2026', 'month': '05', 'day': '04'}

# 플래그 결합
LOG = re.compile(
    r'^ERROR:\s+(.*)$',
    re.MULTILINE | re.IGNORECASE
)

# Inline 플래그 등가
LOG = re.compile(r'(?im)^ERROR:\s+(.*)$')

External links

Exercise

본인 코드의 정규식 잡기. VERBOSE 모드 + named 그룹으로 모듈 레벨 컴파일된 패턴 변환. 호출 코드가 self-documenting 됐는지 확인 (m.group(1) 대신 m.group('name')).

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.