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

그룹에 수량자

~8 min · groups, quantifier, capture

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

수량자는 그룹 전체에 적용돼

(ab)+ab 묶음을 한 번 이상 반복하고, (\d{3})?는 세 자리 숫자 그룹 전체를 선택적으로 만들어. 여러 글자를 하나의 반복 단위로 묶고 싶을 때 그룹을 써.

반복된 캡처가 남기는 값

캡처 그룹에 수량자를 붙이면 그룹 값에는 마지막 반복만 남아. (ab)+ababab 전체를 매칭해도 그룹 1은 마지막 ab만 담아.

반복 전체를 캡처하려면 ((ab)+)처럼 바깥 그룹을 하나 더 둬. 그러면 바깥 그룹은 ababab를, 안쪽 그룹은 마지막 ab를 담아.

값이 필요 없다면 비캡처 그룹

수량자의 범위만 묶고 캡처 값은 필요하지 않다면 (?:...)를 써. (?:ab)+는 의도를 분명히 보여 주고, 마지막 반복만 캡처되는 뜻밖의 결과도 피하게 해. 그룹의 세부 동작은 트랙 4에서 더 자세히 다룰 거야.

Code

그룹 + 수량자·python
import re

# 전체 그룹 반복
re.findall(r'(ab)+', 'abababab abc')
# ['ab', 'ab']  — 그룹이 마지막 반복만 캡처

# 모든 반복 포함 전체 매칭 얻으려면 re.finditer
for m in re.finditer(r'(ab)+', 'abababab'):
    print(m.group(0), m.group(1))
# 'abababab' 'ab'  — group(0) 전체 매칭; group(1) 마지막 반복

# 전체 반복 청크 캡처: 외부 그룹
m = re.match(r'((ab)+)', 'abababab')
print(m.group(1))  # 'abababab'  — 외부가 다 캡처
print(m.group(2))  # 'ab'        — 내부는 여전히 마지막 반복

# 비캡처 — 그룹화만 필요할 때 가장 깨끗
re.findall(r'(?:ab)+', 'abababab')
# ['abababab']  — 캡처 없음, 전체 매칭 반환

External links

Exercise

fooBARbazFOO에서 세 글자 묶음을 모두 얻는 패턴을 작성해. (\w{3})+가 한 묶음만 반환할지 모든 묶음을 반환할지 먼저 예측하고 실행해. 그런 다음 re.findall(r'\w{3}', ...)로 바꿔 결과를 비교하고, 바깥 수량자가 캡처 값을 누적하지 않는 이유를 설명해.

Progress

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

댓글 0

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

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