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

단어 경계 — \b

~8 min · word-boundary, anchors, zero-width

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

단어 문자와 비단어 문자 사이의 보이지 않는 위치

\b는 단어 문자 \w와 비단어 문자 사이를 확인하는 너비 0 검사야. 문자를 소비하지 않고 현재 위치가 단어 경계라고 확인만 해.

\bcat\bThe cat sat의 독립된 cat을 매칭하지만 concatenate 안의 cat은 매칭하지 않아. 그 안에서는 c 앞과 t 뒤에 다른 단어 문자가 있어서 경계가 없거든.

단어 경계가 생기는 위치

\b는 다음 세 위치에서 매칭해.

  • 첫 글자가 단어 문자라면 문자열 시작.
  • 마지막 글자가 단어 문자라면 문자열 끝.
  • 단어 문자와 비단어 문자가 맞닿는 자리.

\B는 그 반대인 "단어 경계가 아닌 위치"를 확인해. \Bcat\Bconcatenate 안의 cat을 매칭하지만 The cat sat의 독립된 단어는 매칭하지 않아.

Unicode에서 다시 주의할 점

단어 경계는 \w의 정의에 의존하고, 그 정의는 엔진과 플래그마다 달라. ASCII 전용 모드에서는 안녕 안에 \w 글자가 없으므로 \b도 한글 단어 경계를 인식하지 못해. Python 기본 Unicode 모드에서는 한글을 단어 문자로 다뤄. 반면 JavaScript의 /u만으로는 \w\b가 한글을 단어로 인식하지 않아. Unicode 속성 이스케이프와 양옆 조건을 명시해 경계를 만들어야 해.

Code

단어 경계 실전·python
import re

# 단어 단위 매칭
re.findall(r'\bcat\b', 'The cat sat in concatenate')
# ['cat']  — 'concatenate' 안의 'cat' 제외

# 'p' 로 시작하는 모든 단어
re.findall(r'\bp\w+', 'pippa loves python and pasta')
# ['pippa', 'python', 'pasta']

# \B 로 단어 안만
re.findall(r'\Bing\b', 'singing rings stings')
# ['ing']  — 'singing'만 ing로 끝나고, rings와 stings는 ings로 끝남

External links

Exercise

한국어와 영어가 섞인 글에서 \bcat\b\bPippa\b를 검색하고 주변 문자에 따라 경계가 어떻게 달라지는지 확인해. 이어서 \b피파\b를 여러 엔진과 유니코드 설정에서 시험하고, 어느 조합에서 원하는 결과가 나오는지 기록해.

Progress

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

댓글 0

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

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