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

실전 — 태그, 따옴표, 숫자

~12 min · practical, patterns

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

모든 거 결합한 진짜 패턴 셋

이제 quantifier, character class, anchor, 그룹 다 가짐. 실전 코드에서 어떻게 결합되는지.

HTML/XML 태그 (loose)

<div>, <p class="foo"> 같은 단순 태그 추출: <[^>]+>. Negated class 가 greedy .* 함정 회피. (진짜 HTML 파싱은 여전히 파서 필요 — 이건 ad-hoc 추출용.)

따옴표 문자열

이중 따옴표 사이 어떤 거든 매칭: "[^"]*". Negated class 가 ReDoS-safe 만들고 첫 닫는 따옴표에서 멈춤. 안에 escape 된 따옴표 (\") 처리하려면 패턴 자라남: "(?:[^"\\]|\\.)*" — "비-따옴표-비-백슬래시 또는 escape 된 어떤 거."

숫자 (정수 또는 소수, 부호 있음/없음)

-?\d+(\.\d+)? 매칭: optional 마이너스, 한 개 이상 숫자, optional 소수 부분. 소수 부분이 ? 있는 그룹에 wrap, 그래야 전체 .\d+ 시퀀스가 optional, 숫자만이 아니라.

Quantifier 체크리스트

Quantifier 있는 진짜 패턴 작성할 때 묻기:

  1. 각 조각이 + (필수) 인가 * (optional) 인가?
  2. .* 사용이 정당화되는가, 아니면 [^X]* 여야 하는가?
  3. {n,m} 경계가 타이트한가 (안에 공백 없음)?
  4. 적절한 자리에 anchor 했나 (\b 또는 ^...$)?
  5. 빈 입력과 매우 긴 입력 테스트 했나?

다섯 질문. Quantifier 버그 90% 잡음.

Code

Production-ready 패턴 셋·python
import re

# Loose HTML 태그
re.findall(r'<[^>]+>', '<p>hi</p> <a href="x">link</a>')
# ['<p>', '</p>', '<a href="x">', '</a>']

# Escape 지원 따옴표 문자열
pat = r'"(?:[^"\\]|\\.)*"'
re.findall(pat, '"simple" "with \\"escape\\" inside"')
# ['"simple"', '"with \\"escape\\" inside"']

# 숫자: 부호 있는 정수 또는 소수
for m in re.finditer(r'-?\d+(?:\.\d+)?', 'price -19.95 qty 7 ratio 0.5'):
    print(m.group())
# -19.95
# 7
# 0.5

External links

Exercise

본인 실제 코드베이스에서 .* 또는 .+ 쓰는 패턴 하나. negated class 로 다시 쓰기. 같은 입력 테스트. 새 버전이 같은 거 매칭, 더 빠르고 안전하게.

Progress

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

댓글 0

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

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