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

실전 — 로그와 포매팅

~12 min · practical, logs, formatting

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

그룹, 선택, 치환을 한 작업 안에서 연결해

이제 입력을 조각으로 나누고, 여러 모양 가운데 하나를 고르고, 캡처한 값을 새 순서로 조립할 수 있어. 세 가지 작업을 보며 어느 지점부터 전용 파서를 써야 하는지도 함께 확인해 봐.

작업 1: 로그 시간 형식 통일하기

2026-05-04T14:32:11Z, 04/May/2026 14:32:11, 14:32:11 04 May 2026처럼 출처마다 다른 시간 형식이 올 수 있어. 각 모양에 맞는 패턴을 만들고 연도, 월, 일, 시각에 이름을 붙여 캡처해.

숫자 월과 영문 월을 서로 바꾸려면 역참조만으로는 부족해. 치환 함수에서 월 이름과 번호를 대응시킨 다음 하나의 표준 형식으로 다시 조립해야 해.

작업 2: 제한된 한 줄 CSV 이해하기

Pippa,"3, going on 30",warm처럼 따옴표 안에 쉼표가 있는 한 줄을 생각해 봐. (?:"([^"]*)"|([^,]*))(?:,|$)는 이스케이프된 따옴표와 줄바꿈이 없는 제한된 입력을 설명하는 학습용 패턴이야. finditer로 그대로 돌리면 문자열 끝에 가짜 빈 필드까지 생길 수 있으니 실제 CSV에는 csv 같은 전용 라이브러리를 써.

작업 3: Markdown 일부를 바꾸기

re.sub(r'\*\*([^*]+)\*\*', r'<strong>\1</strong>', text)는 단순한 **bold** 조각을 <strong>bold</strong>로 바꿔. 통제된 일회성 변환에는 쓸 수 있지만 중첩과 이스케이프까지 포함한 실제 Markdown은 검증된 파서가 맡아야 해.

조합할 때 지킬 순서

  1. 이름 붙은 그룹으로 입력의 의미 있는 조각을 캡처해.
  2. 값이 필요 없는 괄호는 비캡처 그룹으로 써.
  3. 이미 알고 있는 입력 변형만 선택으로 표현해.
  4. 조각을 재배열할 때는 역참조나 치환 함수를 사용해.
  5. 정상 입력과 함께 실패하기 쉬운 입력도 최소 하나씩 시험해.

정규식이 입력 모양을 설명하는 범위를 넘어 문법 전체를 파싱하기 시작한다면, 더 길게 밀어붙이지 말고 전용 파서로 경계를 넘겨.

Code

실전 변환 모음·python
import re

# 1. ISO 날짜를 MM/DD/YYYY 로 정규화
re.sub(
    r'(?P<y>\d{4})-(?P<m>\d{2})-(?P<d>\d{2})',
    r'\g<m>/\g<d>/\g<y>',
    'logged 2026-05-04'
)
# 'logged 05/04/2026'

# 2. 따옴표 있는 CSV 필드 추출
def parse_csv_line(line):
    pattern = r'(?:"([^"]*)"|([^,]*))(?:,|$)'
    fields = []
    for m in re.finditer(pattern, line):
        quoted, bare = m.groups()
        fields.append(quoted if quoted is not None else bare)
        if not m.group():  # 빈 거에 무한 루프 회피
            break
    return fields

parse_csv_line('Pippa,"3, going on 30",warm')
# ['Pippa', '3, going on 30', 'warm', '']

# 3. Markdown bold → HTML
re.sub(r'\*\*([^*]+)\*\*', r'<strong>\1</strong>', 'this is **bold** text')
# 'this is <strong>bold</strong> text'

External links

Exercise

로그 형식 변경, 파일 이름 정리, 단순 코드 일괄 변환 가운데 실제 작업 하나를 골라 그룹·선택·치환을 조합해 풀어 봐. 정상 입력과 예외 입력을 시험하고 최종 코드를 한두 줄과 함께 남겨.

Progress

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

댓글 0

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

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