첫 움직임: regex101 에 붙여 넣기
버그가 뭐든 본인 첫 액션은: 패턴 복사, 입력 복사, 옳은 flavor 선택된 regex101.com 에 둘 다 붙여 넣기. 설명 패널이 패턴 분해; 매칭 패널이 무엇이 맞고 안 맞는지 보여줘.
정규식 버그 절반이 시각화 보기 전엔 invisible.
Python 디버그 플래그
re.compile(pattern, re.DEBUG) 가 컴파일된 state machine print. 엔진이 본인 패턴 실제로 어떻게 파싱하는지 이해에 유용.
Narrowing 기법
패턴이 "매칭해야 할 거 안 매칭" 할 때 절반으로 자르기:
- 패턴 첫 절반 잡고 입력에 테스트. 매칭?
- 둘째 절반. 입력이 기대하는 거 가짐?
- 실패 시작하는 경계 찾기.
이 bisection 이 전체 패턴 응시보다 이슈 빠르게 찾음.
캡처 로깅
이슈가 "매칭하지만 잘못된 거 캡처" 면 모든 그룹 print:
m = pattern.search(text)
if m:
print(m.group(0)) # 전체 매칭
print(m.groups()) # 번호 그룹
print(m.groupdict()) # named 그룹
print(m.span()) # 위치
흔한 버그 시그니처
- "None 반환": 아마 anchoring 또는 잘못된 escape (raw string?).
- "너무 많이 매칭": greedy vs lazy, 또는 word boundary 빠짐.
- "너무 적게 매칭": optional 조각 빠짐, 잘못된 character class.
- "Hang": catastrophic backtracking. 중첩 quantifier 찾기.
- "테스터에선 동작, 코드에선 실패": flavor 미스매치 또는 string escape 이슈.