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

0번 또는 1번 — ?

~6 min · quantifier, optional

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

?는 바로 앞 요소를 선택 사항으로 만들어

?를 붙인 요소는 0번 또는 1번만 나타날 수 있어. colou?r에서는 u만 선택 사항이므로 colorcolour는 매칭하지만 colur는 매칭하지 않아.

한 글자나 한 묶음이 있어도 되고 없어도 되는 입력에서 이 문법이 자주 쓰여.

선택 사항을 패턴으로 옮겨 봐

  • https?://example.coms가 선택 사항이라 HTTP와 HTTPS 주소 모양을 모두 받아들여.
  • -?\d+는 마이너스 부호가 있거나 없는 정수를 찾아.
  • (\+1)? \d{3}-\d{4}에서는 국가 코드 묶음 전체가 선택 사항이야.
  • analy[sz]e, colou?r, cent(er|re)처럼 철자 차이도 표현할 수 있어.

다른 수량자 뒤의 ?는 뜻이 달라

*?, +?, ??, {n,m}?에서는 ?가 앞 요소를 선택 사항으로 만드는 게 아니라 수량자를 게으르게 바꿔. x?x*?는 생김새가 비슷해도 전자는 x를 0번이나 1번, 후자는 x를 가능한 적게 반복한다는 차이가 있어.

Code

선택적 조각용?·python
import re

# 선택적 'u' — color 또는 colour
re.findall(r'colou?r', 'color colour colur')
# ['color', 'colour']  — colur는 두 번째 o가 빠져서 매칭되지 않음

# 선택적 프로토콜
re.findall(r'https?://[\w.]+', 'visit http://a.com and https://b.com')
# ['http://a.com', 'https://b.com']

# 선택적 부호
re.findall(r'-?\d+', '-5 and 7 and -100')
# ['-5', '7', '-100']

# 영국 vs 미국 철자
re.findall(r'analy[sz]e', 'analyze the analyse')
# ['analyze', 'analyse']

External links

Exercise

organize, organise, organization, organisation을 모두 매칭하는 패턴 하나를 만들고 네 입력에 시험해. 이어서 접미사가 없는 organis도 대입해서 의도하지 않은 부분 매칭이 생기는지 확인해.

Progress

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

댓글 0

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

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