C.W.K.
Stream
Lesson 11 of 12 · published

그룹에 quantifier

~8 min · groups, quantifier, capture

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

Quantifier 가 그룹 전체에 적용

이전 강에서 봤어. (ab)+ 는 'ab' 한 번 이상 반복 매칭. (\d{3})? 는 optional 3자리 그룹. 그룹은 quantifier 가 여러 글자 scope 잡게 하는 방법.

캡처 놀람

함정: 캡처 그룹에 quantifier 있으면 캡처된 값은 마지막 반복만. 전체 반복 매칭 아님 — 마지막 라운드만.

패턴 (ab)+ 입력 ababab: 전체 매칭은 ababab 지만 group 1 캡처 값은 ab (마지막 반복만). 전체 반복 캡처하려면 반복 전체 wrap: ((ab)+) — 외부 group 1 이 ababab 캡처, 내부 group 2 가 마지막 ab 캡처.

그룹화만 필요면 non-capturing

그룹 값 캡처 필요 없으면 non-capturing 그룹 (?:...) 사용. Quantifier 위해 그룹화하지만 캡처 슬롯 할당 안 함. 트랙 4 에서 자세히.

지금은 패턴 (?:ab)+ 가 'ab' 반복하면서 캡처 시도 안 함 — 더 깨끗하고 약간 빠름.

Code

그룹 + quantifier·python
import re

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

# 모든 반복 포함 전체 매칭 얻으려면 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'        — 내부는 여전히 마지막 반복

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

External links

Exercise

'fooBARbazFOO' 같은 문자열의 모든 반복 3-글자 블록 캡처하는 패턴 작성. (\w{3})+ 가 한 블록 반환할지 셋 다일지 예측. 돌려. 그 다음 실제 셋 다 반환하게 re.findall(r'\w{3}', ...) 로 수정 — 때론 옳은 답이 quantifier 가 아예 아냐.

Progress

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

댓글 0

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

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