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

문자 클래스 [abc] — 집합에서 하나

~8 min · character-class, brackets

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

대괄호 안에서 한 글자를 골라

[abc]a, b, c 가운데 한 글자만 매칭해. abc라는 세 글자짜리 문자열을 찾는 문법이 아니라는 점이 핵심이야.

모음 하나는 [aeiou], 영문자나 숫자 하나는 [a-zA-Z0-9], 공백이나 쉼표 같은 구분자 하나는 [ ,;\t]로 나타낼 수 있어. 입력의 한 자리에 올 수 있는 후보를 먼저 생각하면 문자 클래스를 자연스럽게 만들 수 있지.

문자 클래스 안에서는 규칙이 달라져

바깥에서 특별한 뜻을 갖는 기호도 [...] 안에서는 대부분 문자 그대로 취급돼. 예를 들어 ., +, ?, 괄호와 중괄호는 보통 따로 이스케이프할 필요가 없어.

그래도 다음 네 기호는 위치와 엔진 방언을 살펴야 해.

  • ]는 클래스를 닫아. JavaScript·Python·PCRE에서는 보통 \]로 쓰고, POSIX BRE/ERE에서는 첫 위치에 두는 방식도 사용해.
  • \는 클래스 안에서도 이스케이프 문자야.
  • ^가 첫 위치에 오면 클래스를 부정하고, 다른 위치에서는 보통 문자 그대로야.
  • -가 두 문자 사이에 오면 범위를 뜻해. 첫 위치나 끝에 두거나 이스케이프하면 하이픈 자체를 찾을 수 있어.

순서와 중복은 결과를 바꾸지 않아

[cba][abc]는 같은 세 글자를 허용하고, [aabbcc]도 결과는 같아. 문자 클래스는 순서 있는 문자열이 아니라 허용할 문자들의 집합으로 읽어 봐.

Code

문자 클래스 기본·python
import re

# '모음'
re.findall(r'[aeiou]', 'hello world')
# ['e', 'o', 'o']

# Hex 자리 (한 글자)
re.findall(r'[0-9a-fA-F]', '#FF8FBE')
# ['F', 'F', '8', 'F', 'B', 'E']

# 클래스 안 점은 리터럴
re.findall(r'[.,;]', 'Hi, world; ok.')
# [',', ';', '.']

# 클래스에 ']' 포함하려면 escape 또는 첫 위치
re.findall(r'[][]', '[1] [2] [3]')  # '[' 또는 ']' 매칭
# ['[', ']', '[', ']', '[', ']']

External links

Exercise

전화번호에 들어갈 수 있는 단일 글자를 매칭하는 문자 클래스 하나를 써봐. 숫자, 플러스, 하이픈, 괄호, 공백을 포함하되 선택 연산자는 쓰지 마. +1 (415) 555-0199에 적용해서 글자가 하나씩 매칭되는지 확인해.

Progress

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

댓글 0

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

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