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

범위: {n,}와 {n,m}

~6 min · quantifier, range, bounded

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

중괄호로 반복 횟수의 범위를 정해

중괄호 수량자는 정확한 횟수뿐 아니라 최솟값과 최댓값도 표현할 수 있어.

  • {n}은 정확히 n번 반복하고
  • {n,}은 적어도 n번 반복하고
  • {n,m}n번 이상 m번 이하로 반복해.

\d{3,4}는 숫자 세 자리나 네 자리를 찾고, a{2,}a가 두 개 이상 이어져야 성공해. x{0,5}x를 하나도 쓰지 않거나 최대 다섯 개까지 허용해.

기본 수량자도 같은 체계 안에 있어

  • *{0,}과 같고
  • +{1,}과 같고
  • ?{0,1}과 같아.

보통은 더 짧고 익숙한 기호를 쓰지만, 이 대응을 알면 모든 수량자를 "최소 몇 번, 최대 몇 번"이라는 한 가지 질문으로 이해할 수 있어.

중괄호 안에는 공백을 넣지 마

{3, 5}처럼 쉼표 뒤에 공백을 두면 엔진에 따라 리터럴로 보거나 오류를 낼 수 있어. 세 번에서 다섯 번이라는 뜻을 확실히 전달하려면 {3,5}처럼 붙여 써.

Code

범위 수량자·python
import re

# 3 또는 4 숫자 — 지역 번호 또는 연도
re.findall(r'\b\d{3,4}\b', 'call 415 then 2026 then 90210')
# ['415', '2026']  — 90210은 5자리라 매칭되지 않음

# 2 이상 — 중복 글자 묶음
re.findall(r'(\w)\1{2,}', 'AAAA bbb cccc ddddd')
# ['A', 'b', 'c', 'd']

# 상한 — 0x 접두사 뒤에 최대 8자리 16진수
re.findall(r'\b0[xX][0-9a-fA-F]{1,8}\b', '0xFF 0xDEADBEEF 0x123456789')
# ['0xFF', '0xDEADBEEF']  — 마지막 값은 16진수가 9자리라 제외

# 등가
re.match(r'a{1,}', 'aaa').group() == re.match(r'a+', 'aaa').group()  # True

External links

Exercise

3~20자의 사용자 이름을 검증하는 패턴을 작성해. 영문자로 시작하고 뒤에는 영문자, 숫자, 밑줄만 허용해야 해. a, this_is_a_username, this_is_way_too_long_for_us, 1starts_wrong을 대입해 각 성공과 실패 이유를 확인해.

Progress

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

댓글 0

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

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