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

중첩 그룹

~6 min · nested, numbering

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

그룹 안의 그룹

그룹은 중첩 가능. 외부 그룹이 안의 모든 거 캡처; 내부 그룹들이 자기 조각 독립적으로 캡처.

패턴 ((\d+)-(\d+)) 입력 42-1138:

  • Group 1: 42-1138 (외부 가 모든 거 wrap)
  • Group 2: 42 (첫 내부)
  • Group 3: 1138 (두 번째 내부)

번호는 여는 괄호 따라

왼쪽에서 오른쪽 순서로 어느 ( 가 먼저 나오는지가 다음 그룹 번호 받음. 그래서 (a(b)c)(d) 에서:

  • Group 1: (a(b)c) — 그 ( 가 가장 왼쪽
  • Group 2: (b) — 그 ( 가 두 번째
  • Group 3: (d) — 그 ( 가 세 번째

번호 지옥 탈출 위해 named 그룹

깊이 중첩된 패턴엔 named 그룹이 구원. 패턴 편집, 그룹 추가/제거해도 named 참조 동작. 번호 참조는 다 업데이트 필요.

Code

중첩 그룹·python
import re

# 외부가 전체 캡처, 내부가 조각 캡처
m = re.match(r'((\d+)-(\d+))', '42-1138')
m.group(0)  # '42-1138' (전체 매칭)
m.group(1)  # '42-1138' (외부)
m.group(2)  # '42'
m.group(3)  # '1138'

# 번호가 여는 괄호 순서 따라
m = re.match(r'(a(b)c)(d)', 'abcd')
m.group(1)  # 'abc'
m.group(2)  # 'b'
m.group(3)  # 'd'

# Named 그룹이 중첩 명확히 살아남음
DATE = re.compile(r'(?P<full>(?P<year>\d{4})-(?P<month>\d{2})-(?P<day>\d{2}))')
m = DATE.match('2026-05-04')
m.group('full')   # '2026-05-04'
m.group('year')   # '2026'
m.group('month')  # '05'
m.group('day')    # '04'

External links

Exercise

Group 1 에 전체 이메일 주소, group 2 에 도메인만 캡처하는 패턴 작성. 외부 그룹이 내부 local-part + @ + 도메인 패턴 wrap. m.group(1) 이 전체 이메일, m.group(2) 가 도메인만 주는지 테스트.

Progress

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

댓글 0

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

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