정규식에서 문자 범위란?
정규식(Regular Expression)에서 문자 범위(range)는 두 개의 문자를 하이픈(-)으로 연결하여 표현합니다. 대괄호 []로 묶인 문자 클래스 안에서 범위를 지정하면, 해당 범위에 속한 모든 문자와 일치시킬 수 있습니다.
[a-z]→ 모든 소문자 ASCII 알파벳(a부터 z까지)[0-5][0-9]→ 00부터 59까지의 모든 두 자리 숫자[A-Z]→ A부터 Z까지의 모든 대문자
숫자 매칭 예시
범위는 숫자 매칭에서도 유용하게 사용됩니다.
[0-9]→ 0부터 9까지의 한 자리 숫자와 일치[1-9][0-9]→ 10부터 99까지의 두 자리 숫자와 일치
예를 들어 [0-5][0-9]는 첫 자리가 0~5, 둘째 자리가 0~9인 조합만 찾아내므로, 시간의 분(minute)처럼 00~59 범위의 값을 검증할 때 매우 유용합니다.
하이픈(-)을 문자 그대로 매칭하는 방법
문자 클래스 안에서 하이픈은 기본적으로 범위를 나타내는 특수 문자입니다. 하지만 다음 두 가지 경우에는 하이픈이 일반 문자(literal '-')로 해석됩니다.
- 백슬래시로 이스케이프하는 경우:
[a\-z]→ a, -, z 세 문자 중 하나와 일치 - 문자 클래스의 맨 앞 또는 맨 뒤에 배치하는 경우:
[-a],[a-]→ 하이픈이 리터럴 문자로 취급됨
파이썬 코드 예제
import re
# 소문자 알파벳만 추출
result = re.findall(r'[a-z]', 'Hello World')
print(result) # ['e', 'l', 'l', 'o', 'o', 'r', 'l', 'd']
# 00~59 범위의 두 자리 숫자 추출
result = re.findall(r'[0-5][0-9]', '12 34 56 78 90')
print(result) # ['12', '34', '56']
# 하이픈을 리터럴 문자로 매칭
result = re.findall(r'[a-]', 'a-b c-d')
print(result) # ['a', '-', '-', '-']
정리
정규식에서 범위는 '시작 문자-끝 문자' 형태로 지정하며, 문자 코드 순서를 기준으로 동작합니다. 따라서 [z-a]처럼 시작 문자가 끝 문자보다 뒤에 오면 에러가 발생하므로 주의해야 합니다. 범위 표현을 잘 활용하면 알파벳, 숫자, 특정 코드 값 등을 간결하고 정확하게 매칭할 수 있습니다.