작은 재현 입력부터 만들어
실패하는 입력과 성공해야 하는 입력을 가장 작은 형태로 줄이고, 패턴과 기대 결과를 함께 기록해. 온라인 도구를 사용할 수 있다면 민감 정보를 제거한 재현 입력을 regex101에 넣고 배포 환경과 가장 가까운 정규식 방언을 선택해. 최종 결과는 반드시 실제 엔진에서도 확인해야 해.
엔진이 패턴을 어떻게 읽는지 확인해
Python의 re.compile(pattern, re.DEBUG)는 컴파일된 명령을 출력해. 그룹 범위, 선택의 결합 순서, 수량자가 실제로 어디에 붙었는지 확인할 때 유용해.
패턴을 구획별로 줄여 가며 검사해
매칭해야 할 입력을 놓친다면 완성된 패턴만 바라보지 말고 작은 구획부터 다시 붙여 봐.
- 고정 접두사나 첫 그룹만 테스트해.
- 다음 구획을 하나씩 추가해.
- 기대 결과가 처음 달라지는 지점에서 이스케이프, 경계, 수량자 범위를 확인해.
패턴을 임의의 문자 위치에서 반으로 자르면 문법 자체가 달라질 수 있으므로 의미 있는 구획 단위로 나눠야 해.
전체 매칭과 캡처를 모두 출력해
매칭은 되지만 값이 잘못됐다면 전체 매칭, 각 그룹, 이름 붙은 그룹, 위치를 함께 살펴봐.
m = pattern.search(text)
if m:
print(m.group(0)) # 전체 매칭
print(m.groups()) # 번호 그룹
print(m.groupdict()) # 이름 붙은 그룹
print(m.span()) # 시작과 끝 위치
증상은 출발점일 뿐이야
- 매칭이 없음: 앵커, 이스케이프, 플래그, API의 차이를 확인해.
- 너무 넓게 매칭: 탐욕적 수량자와 경계 조건을 확인해.
- 너무 좁게 매칭: 선택 구간과 문자 클래스가 실제 입력을 포함하는지 확인해.
- 특정 입력에서 매우 느림: 중첩 수량자나 겹치는 대안이 만드는 백트래킹을 측정해.
- 테스터와 코드의 결과가 다름: 엔진 방언, 플래그, 호스트 문자열의 이스케이프를 비교해.