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

왜 'Zero-Width' 가 중요한가

~6 min · zero-width, engine

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

커서가 그 자리에 머묾

Lookaround 의 가장 중요한 속성 한 가지: assertion 실행 후 엔진이 전 같은 위치. 글자 소비 없음.

실전 결과 두 개:

1. 한 위치의 여러 lookaround 가 자연스럽게 chain. 각각 같은 자리에서 엿봄. (?=A)(?=B)(?=C) 는 "여기서 시작 A AND B AND C 다 매칭" 의미.

2. Lookaround 안의 텍스트가 후속 매칭과 OVERLAP 가능. (?=cat)\w+ 가 먼저 'cat' 여기 시작 주장, 그 다음 \w+ 가 실제로 'cat' 소비 (그리고 더). 같은 글자, 두 역할.

소비 대안과 비교

패턴 cat\d+ 가 'cat' 소비 후 숫자 매칭. 후 커서가 숫자 너머.

패턴 (?=cat)\d+ 는 절대 매칭 안 됨 — 'cat' 여기 주장, 그 다음 같은 위치에서 숫자 매칭 시도, 근데 위치가 'c', 숫자 아님.

패턴 (?=cat\d)cat\d+ 동작 — 'cat' 다음 숫자 따라옴 주장, 그 다음 실제로 cat 과 숫자 매칭.

왜 split 에 중요

Zero-width 매칭이 re.split(r'(?=[A-Z])', 'CamelCase') 가 모든 대문자에서 split 하면서 대문자 *삭제* 안 하게 함. Boundary 글자 소비 없이 split 위치 감지.

Code

Zero-width 실전·python
import re

# Lookahead 가 소비 안 함 — 같은 위치 여러 개 chain
re.findall(r'(?=\d)(?=\d{2})\d+', '5 12 345')
# ['12', '345']  — 숫자 AND 최소 2 숫자

# Lookahead 없으면 첫 숫자 소비
re.findall(r'\d{2}\d+', '5 12 345')
# ['345']  — 다른 결과; 2 숫자 소비 후 계속

# 구분자 유지 split
re.split(r'(?=[A-Z])', 'CamelCaseString')
# ['', 'Camel', 'Case', 'String']

# 구분자 소비 split (lookahead 없이)
re.split(r'[A-Z]', 'CamelCaseString')
# ['', 'amel', 'ase', 'tring']  — 대문자 삭제됨

External links

Exercise

Lookahead 와 re.split 사용해서 snake_case 문자열 hello_world_pippa 를 split, 언더스코어가 다음 단어에 붙음: ['hello', '_world', '_pippa']. 힌트: lookahead 가 언더스코어 다음 옴 주장.

Progress

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

댓글 0

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

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