C.W.K.
Stream
Lesson 02 of 10 · published

Positive Lookahead — (?=...)

~8 min · lookahead, positive

Level 0패턴 호기심
0 XP0/90 lessons0/15 achievements
0/100 XP to next level100 XP to go0% complete

뭔가 따라옴 주장, 소비 없이

(?=...) 는 "현재 위치에서, lookahead 안의 패턴이 매칭" 의미. 엔진이 확인하지만 소비 X. 메인 패턴의 lookahead 뒤 거가 같은 위치에서 계속.

실전 사용 셋

따라오는 거로 매칭 제약. \d+(?= dollars) 가 "dollars" 따라올 때만 숫자 매칭. 주의: 'dollars' 가 매칭 성공에 필수지만 캡처된 값에 안 들어감.

같은 위치에 여러 요구 stack. (?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,} — "시작에서, 셋 다 참이어야: 소문자 포함, 대문자 포함, 숫자 포함, AND 8+ 글자." 각 lookahead 가 별개 제약, 다 같은 위치에 anchor.

경계 포함 없이 split 위치 찾기. 마커 *앞에* split 하고 다음 청크에 마커 유지하고 싶을 때 re.split 와 유용.

커서가 안 움직임

결정적 멘탈 모델: lookahead 성공 후 엔진이 lookahead *전* 같은 위치. 패턴에서 lookahead 뒤 작성된 거가 그 위치에서 매칭 시작. 그래서 \d+(?=kg)kg 가 숫자 매칭 + 'kg' 다시 매칭 (커서가 lookahead 콘텐츠 지나가지 않았으니까).

Code

Positive lookahead 패턴·python
import re

# 'kg' 따라오는 숫자 — 숫자만 반환
re.findall(r'\d+(?=kg)', '5kg flour 2kg sugar 7lb butter')
# ['5', '2']

# 제약: 'ing' 으로 끝나는 단어 ('ing' 빼고 캡처)
re.findall(r'\w+(?=ing\b)', 'running jumping reading')
# ['runn', 'jump', 'read']

# 비밀번호 룰 위한 stack 된 lookahead
password = re.compile(r'^(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}$')
bool(password.match('Aa1aaaaa'))   # True
bool(password.match('aaaaaaaaa'))  # False (대문자/숫자 없음)
bool(password.match('Aa1'))        # False (너무 짧음)

# 대문자 앞 split, 소비 없이
re.split(r'(?=[A-Z])', 'CamelCaseString')
# ['', 'Camel', 'Case', 'String']

External links

Exercise

'MB' 또는 'GB' (대소문자 구분) 따라오는 숫자 매칭 정규식 작성. 숫자만 반환. the file is 12MB and the cache is 4GB and the limit is 100KB 테스트 — 처음 둘만 매칭되어야.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.