본문 바로가기
C.W.K.
Stream
Lesson 02 of 10 · published

긍정형 전방 탐색 — (?=...)

~8 min · lookahead, positive

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

뒤따르는 조건만 확인하기

(?=...)는 현재 위치 뒤의 텍스트가 조건과 맞는지 확인하지만 문자는 소비하지 않아. 검사가 끝나면 뒤의 본 패턴은 같은 위치에서 계속 매칭해.

자주 쓰는 세 가지 경우

뒤따르는 단위로 결과를 제한해. \d+(?= dollars)dollars가 뒤에 오는 숫자만 찾고 결과에는 숫자만 담아.

같은 시작 위치에서 여러 조건을 확인해. Python에서는 re.fullmatch(r'(?=.*[a-z])(?=.*[A-Z])(?=.*\d).{8,}', text)처럼 소문자, 대문자, 숫자, 최소 길이 조건을 각각 검사할 수 있어.

경계 문자를 남긴 채 분할해. re.split에서 마커 앞을 나누면서 마커를 다음 조각에 남기고 싶을 때 유용해.

커서는 움직이지 않아

\d+(?=kg)kg는 숫자를 소비한 뒤 kg가 이어지는지 검사하고, 검사 자체가 kg를 소비하지 않았으므로 뒤의 kg가 실제로 그 문자를 매칭해.

Code

긍정형 전방 탐색 패턴·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']

# 비밀번호 룰 위한 겹친 전방 탐색
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

대소문자를 구분하는 MBGB가 바로 뒤에 오는 숫자만 반환하는 패턴을 작성해. the file is 12MB and the cache is 4GB and the limit is 100KB에 적용해서 124만 매칭되는지 확인해.

Progress

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

댓글 0

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

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