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

치환에서 그룹

~8 min · substitution, replacement, sed

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

치환 문자열에서 캡처 그룹 참조

치환 (re.sub, sed s/old/new/, 정규식 있는 str.replace_all) 이 치환에서 캡처 그룹 참조 허용.

  • Python re.sub: \1, \2, 또는 named 그룹 \g<name>
  • JavaScript replace: $1, $2, 또는 $<name>
  • sed: \1, \2
  • ripgrep --replace: $1, $2 또는 $name

고전 사용: 포맷 변환

2026-05-0405/04/2026 로 변환: re.sub(r'(\d{4})-(\d{2})-(\d{2})', r'\2/\3/\1', text).

치환에서 캡처 그룹 재배열. 정규식이 code mod, 로그 재포맷, CSV-to-CSV 변환에서 밥값 하는 방법.

'전체 매칭' 참조

Group 0 이 전체 매칭. Wrap 에 유용: re.sub(r'\d+', r'[\g<0>]', text) 가 모든 숫자를 명시 캡처 없이 대괄호로 wrap. JavaScript: $&; sed: &.

치환에 함수

복잡한 치환엔 대부분 언어가 문자열 대신 함수 전달 허용. Python: re.sub(pattern, callable, text). Callable 이 Match 객체 받고 문자열 반환. 동적 로직 — 대문자화, 룩업, 조건 재작성 — 순수 치환 문자열이 표현 못 하는 거 가능.

Code

치환 패턴·python
import re

# 날짜 조각 재배열
re.sub(r'(\d{4})-(\d{2})-(\d{2})', r'\2/\3/\1', '2026-05-04 was today')
# '05/04/2026 was today'

# Named 치환
pattern = r'(?P<year>\d{4})-(?P<month>\d{2})'
re.sub(pattern, r'\g<month>/\g<year>', '2026-05')
# '05/2026'

# 전체 매칭으로 wrap
re.sub(r'\d+', r'[\g<0>]', 'order 1138 of 9999')
# 'order [1138] of [9999]'

# 치환에 함수 — 모든 매칭 대문자
re.sub(r'\b\w+\b', lambda m: m.group().upper(), 'hello world')
# 'HELLO WORLD'

# 로직 있는 함수
def shorten(m):
    n = int(m.group(1))
    return 'small' if n < 10 else 'large'
re.sub(r'(\d+)', shorten, 'order 5 and 50')
# 'order small and large'

External links

Exercise

재포맷 원하는 컬럼 (날짜, 이름 'Last, First' → 'First Last' 등) 있는 CSV-식 파일 잡기. 변환 수행하는 re.sub 한 개 작성. 돌리기. 전체 파일이 한 줄에 재작성되어야.

Progress

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

댓글 0

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

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