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

너비 0 검사가 뭔데?

~10 min · zero-width, lookaround, fundamentals

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

문자를 소비하지 않고 위치를 검사해

\b는 이미 만난 너비 0 검사야. 단어 문자와 비단어 문자 사이인지 확인하지만 어떤 문자도 매칭 결과에 넣지 않아. 검사 대상은 문자가 아니라 현재 위치야.

전후방 탐색은 이 생각을 더 일반화해. (?=...)는 현재 위치 뒤의 텍스트가 조건과 맞는지 확인한 다음 커서를 그대로 둬. 검사에 사용한 문자는 소비되지 않으므로 뒤 패턴이 같은 위치에서 계속 매칭해.

왜 쓸까

주변 텍스트는 조건으로만 필요하고 결과에는 넣고 싶지 않을 때 유용해. \d+(?=kg)는 뒤에 kg가 붙은 숫자를 찾지만 결과에는 숫자만 담아.

네 가지 형태

  • (?=...) — 긍정형 전방 탐색: 뒤에 조건이 와야 해.
  • (?!...) — 부정형 전방 탐색: 뒤에 조건이 오면 안 돼.
  • (?<=...) — 긍정형 후방 탐색: 앞에 조건이 있어야 해.
  • (?<!...) — 부정형 후방 탐색: 앞에 조건이 있으면 안 돼.

다음 강부터 각 형태를 차례로 연습할 거야.

Code

비소비 검사와 일반 매칭·python
import re

# 전방 탐색 없이 — 매칭에 'kg' 포함
re.findall(r'\d+kg', '5kg of flour, 2kg of sugar')
# ['5kg', '2kg']  — 'kg'는 호출 코드에서 따로 떼야 함

# 전방 탐색으로 — 매칭이 숫자만
re.findall(r'\d+(?=kg)', '5kg of flour, 2kg of sugar')
# ['5', '2']

# 단어 경계 — 원조 너비 0 검사
re.findall(r'\bcat\b', 'cat scatter cats')
# ['cat']  — \b 가 위치 매칭, 글자 아님

External links

Exercise

코드에서 원하는 범위보다 넓게 매칭한 뒤 strip()이나 슬라이싱으로 다듬는 패턴 하나를 찾아. 전방 탐색이나 후방 탐색으로 경계를 옮겨 매칭 결과 자체가 원하는 값만 포함하게 만들고 두 결과를 비교해.

Progress

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

댓글 0

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

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