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번 이상 매칭

* 는 가장 너그러운 quantifier. "이전 요소, 0번 이상 반복" 의미. 결정적인 단어는 0번* 는 항상 매칭, 매칭 안 하는 것도 만족하니까.

패턴 colou*rcolor, colour, colouur, colouuuuuuuur 까지 매칭. u 가 0번 이상 반복.

'이전 요소' 의미

* 는 바로 앞 조각에 적용:

  • 단일 글자: ab*a, ab, abb, abbb...
  • Character class: [0-9]* 는 빈 문자열 또는 어떤 숫자 run.
  • Group: (ab)* 는 빈 문자열, ab, abab, ababab...

왼쪽 요소 — 그게 다. ab*b 만 반복, ab 아님.

'항상 매칭' 의 놀람

* 가 0번도 매칭하니까 * 만 있는 anchor 없는 패턴은 항상 성공. re.match(r'\d*', 'hello') 는 매칭 반환 — 위치 0 의 빈 매칭. 기술적으론 맞지만 거의 안 유용. * 를 anchor 또는 최소 뭔가 매칭 강제하는 다른 요소와 결합.

Code

* 실전·python
import re

# 'colour' 또는 'color' (또는 어떤 u 개수)
re.findall(r'colou*r', 'color colour colouuur colr')
# ['color', 'colour', 'colouuur']  — 'colr' 도 매칭!

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

# Group + * — 그룹 전체 반복
re.findall(r'(ab)*', 'ab abab abc')
# ['ab', 'abab', '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

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

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