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')로 편하게 값을 꺼낼 수 있답니다.
서브목차