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

0번 이상: *

~8 min · quantifier, star

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

*는 바로 앞 요소를 0번 이상 반복해

여기서 가장 중요한 횟수는 0번이야. 앞 요소가 하나도 없어도 조건을 만족하므로 *가 붙은 조각은 빈 문자열을 매칭할 수 있어.

colou*r에서는 u가 반복 대상이야. 그래서 color, colour, colouur처럼 u가 없거나 여러 번 이어진 형태를 받아들이지만 colr는 받아들이지 않아. 반복이 끝난 뒤에도 마지막 or은 반드시 있어야 하거든.

반복 범위는 왼쪽의 요소 하나야

  • ab*에서는 b만 반복해서 a, ab, abb가 되고
  • [0-9]*에서는 숫자 문자 클래스가 반복해서 빈 문자열이나 연속된 숫자가 되고
  • (ab)*에서는 그룹 전체가 반복해서 빈 문자열, ab, abab가 돼.

여러 글자를 함께 반복하려면 그 조각을 먼저 괄호로 묶어야 해.

빈 매칭이 필요한지 꼭 확인해

re.match(r'\d*', 'hello')는 숫자가 없어도 위치 0의 빈 문자열로 성공해. 이 결과가 요구사항과 맞는 경우도 있지만, 실제 값이 하나 이상 필요하다면 +를 써야 해. *를 선택했다면 앵커나 뒤의 필수 요소와 결합했을 때 빈 입력이 어떻게 처리되는지 시험해 봐.

Code

* 실전·python
import re

# 'colour' 또는 'color' (또는 어떤 u 개수)
re.findall(r'colou*r', 'color colour colouuur colr')
# ['color', 'colour', 'colouuur']  — colr는 o가 빠져서 매칭되지 않음

# * 는 이전 요소 한 개에만 바인딩
re.findall(r'ab*', 'a ab abb abbb')
# ['a', 'ab', 'abb', 'abbb']  — b 만 반복

# 캡처 그룹 + * — findall은 전체 매칭이 아니라 마지막 캡처를 반환
re.findall(r'(ab)*', 'ab abab abc')
# ['ab', '', 'ab', '', 'ab', '', '']  — 빈 매칭도 결과에 들어옴

# * 는 항상 매칭 — 빈 문자열도
re.match(r'\d*', 'hello').group()
# ''  (위치 0 의 빈 매칭)

External links

Exercise

re.fullmatch(r'a*', '')의 결과를 먼저 예측한 뒤 직접 실행해. a*를 비밀번호 검증에 사용했다면 어떤 빈 입력 버그가 생기는지도 설명해.

Progress

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

댓글 0

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

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