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

1번 이상: +

~6 min · quantifier, plus

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

+는 앞 요소를 한 번 이상 반복해

*가 0번도 허용하는 데 비해 +는 적어도 한 번은 매칭해야 해. 그래서 \d+는 숫자가 하나 이상 있어야 성공하고, \d*는 숫자가 없어도 성공해. 입력 검증에서는 이 한 번의 차이가 꽤 커.

a+a, aa, aaa처럼 이어진 a를 찾지만 빈 문자열은 찾지 않아. \s+도 공백 문자가 하나 이상 있을 때만 성공해.

값이 반드시 있어야 한다면 +를 골라

빈 입력을 허용할 이유가 없다면 습관적으로 *를 붙이지 마. 숫자나 이름처럼 실제 내용이 필요할 때는 +가 요구사항을 더 정확히 드러내.

반복되는 범위는 바로 앞 요소야

ab+에서는 b만 반복하고, (ab)+에서는 괄호 안의 ab 전체가 반복돼. 여러 글자를 한 묶음으로 반복하려면 먼저 그룹으로 감싸야 해.

Code

+와 *·python
import re

# + 는 최소 하나 필요
re.findall(r'a+', 'b aa aaa baaab')
# ['aa', 'aaa', 'aaa']

# 빈 입력 — + 실패, * 성공
bool(re.fullmatch(r'a+', ''))   # False
bool(re.fullmatch(r'a*', ''))   # True (많은 버그의 원천)

# 흔한 패턴: '비어있지 않은 단어'
re.findall(r'\w+', 'hello   world  ')
# ['hello', 'world']  — 빈 run 은 카운트 안 함

# Group + 가 그룹 반복
re.findall(r'(ha)+', 'haha hahaha ohai')
# ['ha', 'ha']

External links

Exercise

사용 중인 폼 검증 정규식 하나를 골라 모든 *를 점검해. 값이 없어도 되는 자리인지, 적어도 하나는 있어야 하는 자리인지 구분하고 잘못된 *+로 바꾼 뒤 빈 입력을 다시 시험해.

Progress

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

댓글 0

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

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