뭔가 앞에 NOT 옴 주장
(?<!...) 는 lookbehind 의 negative: "이 위치에서, 안의 패턴이 앞 텍스트 NOT 매칭." Lookbehind 패턴이 실패할 때만 매칭 성공.
가장 흔한 사용: escape 됐거나 주석 처리된 콘텐츠 참조 스킵
"'DONE-' prefix 안 붙은 모든 TODO 주석 찾기." Negative lookbehind 가 원치 않는 prefix 부재 주장. 없으면 모든 거 매칭하고 코드에서 필터.
실전 예시: 문장 경계 감지
패턴: (?<!Mr|Mrs|Dr)\.\s+[A-Z] — 점 + 공백 + 대문자, 단 title 약자 앞에 안 붙을 때만. 엉성한 문장 경계가 보통 'Mr. Smith said' 를 두 문장으로 처리. Negative lookbehind 가 그거 수정.
Positive lookbehind 와 같은 너비 제약
Python re 가 여기서도 fixed-width 원함. 패턴 (?<!Mr|Mrs|Dr) 는 다른 너비 대안 (2, 3, 2) — Python 내장 re 가 에러 낼 수 있음. 해결책: regex 모듈 설치, OR 같은 너비로 padding, OR positive 매칭 + 나중 필터링으로 재고.
Anchor 와 상호작용
(?<!^) 는 "문자열 시작이 아님" 의미. Anchor 와 결합으로 lookbehind 가 위치 민감 패턴 풀어줌: "이 토큰 찾되 줄 시작은 아님," "시작이 아닌 따옴표 찾기."