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

그룹 + alternation + 치환 다 합치기

이제 production 급 텍스트 변환에 모든 거 가짐. 실전 작업 셋에 결합.

작업 1: 로그 타임스탬프 정규화

다른 출처 로그가 다른 타임스탬프 포맷: 2026-05-04T14:32:11Z, 04/May/2026 14:32:11, 14:32:11 04 May 2026. 한 canonical 포맷 골라서 다 변환.

전략: named 그룹으로 각 입력 포맷 매칭 패턴 셋 작성, 그 다음 backreference 로 canonical 포맷에 sub.

작업 2: 어색한 따옴표 있는 CSV

실제 CSV 는 지저분: Pippa,"3, going on 30",warm. 중간 필드의 따옴표 안에 콤마. Quoted 와 bare 둘 다 처리하는 패턴: (?:"([^"]*)"|([^,]*))(?:,|$). Finditer 로 각 필드 캡처.

작업 3: Markdown 을 HTML 로 변환 (부분)

**bold**<strong>bold</strong> 로 변환:

re.sub(r'\*\*([^*]+)\*\*', r'<strong>\1</strong>', text)

Markdown 구문당 한 줄. 진짜 Markdown 파서가 production 에 존재; ad-hoc 재작성엔 정규식이 더 빠름.

결합 원칙

  1. Named 그룹으로 입력 모양 묘사.
  2. Scope 위해 non-capturing 그룹.
  3. 알려진 변형엔 alternation.
  4. 재배열엔 치환에 backreference.
  5. 패턴당 최소 적대적 입력 하나로 테스트.

다섯 단계. 한 줄 변환에서 풀 로그 파이프라인까지 scale.

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

오늘 가진 진짜 텍스트 변환 작업 (로그 재포맷, 파일 이름 패턴, code mod). 그룹 + alternation + 치환으로 정규식 한 개로 풀기. 결과 실제 코드 한두 줄.

Progress

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

댓글 0

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

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