1. 탐정의 돋보기 규칙: 기초 패턴 만들기

파이썬에서 re 모듈을 불러오면(import re), 우리는 정규표현식이라는 특수 언어를 쓸 수 있습니다. 이 언어의 핵심은 바로 메타 문자(Meta Character)라는 비밀 기호들입니다.

1.1 비밀 기호 사용법 (문자 클래스)

  • [ ] (선택): 괄호 안의 문자 중 하나만 맞으면 합격!
    • [abc] : “a, b, c 중 하나라도 있나?”
    • [a-z] : “영어 소문자 아무거나!”
    • [가-힣] : “한글 아무거나!”
  • [^ ] (반대): 괄호 안에 ^가 들어가면 “이것 빼고 다 가져와!”라는 뜻입니다.
    • [^0-9] : “숫자 빼고 전부 다!”
  • 단축키 (축약 기호): 매번 [0-9] 쓰기 귀찮아서 만든 단축키들!
    • \d: 숫자 ([0-9]와 동일)
    • \D: 숫자 아닌 것들
    • \s: 띄어쓰기, 엔터 같은 공백들
    • \w: 글자 + 숫자 (특수문자 제외)

1.2 “몇 개나 있어?” (수량자)

내가 찾는 문자가 반복될 때는 수량자 기호를 붙입니다.

  • *: 0개 이상 (없어도 되고 엄청 많아도 OK)
  • +: 1개 이상 (무조건 1개는 있어야 해!)
  • ?: 0개 아니면 1개 (있어도 그만, 없어도 그만)
  • {m, n}: 딱 m개부터 n개까지만! (예: \d{3,4} → 숫자 3~4개)
import re

# "a 다음에 b가 1개 이상 있는 패턴"
pattern = re.compile("ab+")

print(pattern.search("abbbb").group()) # "abbbb" 찾음!
print(pattern.search("acccc"))         # 못 찾아서 터짐(None)!

1.3 좌표 찍기 (앵커 문자)

  • ^: 문장의 맨 처음에서만 찾아라! (^Hello : 첫 단어가 Hello인지 검사)
  • $: 문장의 맨 끝에서만 찾아라! (Python$ : 마지막 단어가 Python인지 검사)

1.4 소그룹 묶기와 이름 붙이기 (Grouping)

전화번호(“010-1234-5678”)를 찾을 때, 앞자리, 중간자리, 뒷자리를 나중에 따로따로 빼서 보고 싶다면 괄호 ( )로 묶어줍니다.

import re

# 괄호 3개로 묶어서 그룹 3개를 만듭니다.
phone_pattern = re.compile("(\d+)-(\d+)-(\d+)")
result = phone_pattern.search("내 번호는 010-9999-8888 이야")

# 전체 찾은 결과
print(result.group()) # 010-9999-8888

# 괄호별로 빼기!
print("국번:", result.group(2)) # 9999

[!TIP] 괄호 맨 앞에 ?P<이름>을 붙이면 그 그룹에 별명을 지어줄 수 있습니다! (?P<middle>\d+) 라고 쓰면, 나중에 result.group('middle')로 편하게 값을 꺼낼 수 있답니다.

서브목차