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

괄호로 그룹화

~6 min · groups, parentheses, scope

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

괄호로 여러 요소를 한 묶음으로 만들어

(ab)+에서는 ab 전체가 반복되고, (abc|def)에서는 두 문자열 가운데 하나를 골라. 괄호 자체가 입력 문자를 소비하지는 않지만 수량자와 선택이 적용되는 범위를 바꿔 줘.

괄호는 네 가지 일을 맡아

  1. 적용 범위를 묶어. (ab)+(abc|def)처럼 여러 요소를 한 단위로 다뤄.
  2. 매칭한 값을 캡처해. (\d{4})-(\d{2})는 연도와 월을 각각 그룹 1과 그룹 2에 담아.
  3. 특수 그룹 문법의 틀을 제공해. (?=...), (?:...), (?>...)도 모두 괄호로 시작하지.
  4. 역참조할 값을 남겨. (\w+) \1은 한 단어 뒤에 같은 단어가 다시 오는 모양을 찾아.

패턴에 괄호를 넣을 때마다 값이 필요한지, 아니면 범위만 묶으면 되는지 먼저 물어봐. 이 선택이 캡처 그룹과 비캡처 그룹을 가르는 기준이야.

평범한 괄호는 캡처 그룹이야

(...)로 매칭한 부분 문자열은 그룹 1, 그룹 2처럼 번호가 붙은 자리에 저장돼. 나중에 추출하거나 역참조할 값이라면 유용하지만, 범위만 묶는다면 4강에서 배울 (?:...)가 의도를 더 분명하게 보여 줘.

Code

다른 일 하는 괄호·python
import re

# Quantifier scope — 'ab' 세 번 이상 반복
re.findall(r'(ab){3,}', 'ababab abababab abc')
# ['ab', 'ab']  — 그룹의 마지막 반복 캡처

# Alternation scope — 'cat' 또는 'dog' 매칭
re.findall(r'(cat|dog)s?', 'cats and dogs and cat-dog')
# ['cat', 'dog', 'cat', 'dog']

# 값 캡처
m = re.match(r'(\d{4})-(\d{2})', '2026-05-04')
m.group(1), m.group(2)
# ('2026', '05')

# Backreference 타겟
bool(re.search(r'(\w+) \1', 'the the cat sat'))
# True  — 'the' 뒤에 'the'

External links

Exercise

괄호가 여러 개 들어간 패턴 하나를 골라 각 그룹이 값을 캡처하려는 것인지, 수량자나 선택의 범위만 묶으려는 것인지 구분해. 값이 필요 없는 그룹은 (?:...)로 바꾸고 결과가 그대로인지 테스트해.

Progress

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

댓글 0

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

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