정규식(Regular Expression)을 사용하면 날짜 문자열이 특정 형식을 따르는지 손쉽게 검증할 수 있습니다. 아래 예제에서는 파이썬의 re.match() 함수를 활용해 날짜 문자열이 "일-월-년(d-m-y)" 형식과 일치하는지 확인하는 방법을 살펴봅니다.
정규식 패턴 분석
예제에서 사용된 정규식 패턴은 다음과 같습니다.
(\d{2})[/.-](\d{2})[/.-](\d{4})$\d{2}: 두 자리 숫자(일 또는 월)를 의미합니다.[/.-]: 하이픈(-), 슬래시(/), 마침표(.) 중 하나를 구분자로 허용합니다.\d{4}: 네 자리 숫자(연도)를 의미합니다.$: 문자열의 끝을 나타내며, 패턴 뒤에 추가 문자가 없어야 함을 보장합니다.
예제 코드
첫 번째 경우에는 주어진 날짜 문자열이 d-m-y 형식과 일치하고, 두 번째 경우에는 형식이 일치하지 않아 None이 반환됩니다.
import re
# 일치하는 경우: d-m-y 형식
datestring = '21-09-1991'
foo = re.match(r'(\d{2})[/.-](\d{2})[/.-](\d{4})$', datestring)
print(foo.group())
# 일치하지 않는 경우: y-m-d 형식
datestring = '1991-09-21'
foo = re.match(r'(\d{2})[/.-](\d{2})[/.-](\d{4})$', datestring)
print(foo)
실행 결과
21-09-1991
None
결과 설명
'21-09-1991'은 "두 자리 숫자 - 두 자리 숫자 - 네 자리 숫자" 구조를 가지므로 패턴과 완전히 일치하며, match 객체가 반환됩니다. 반면 '1991-09-21'은 연도가 앞에 오는 y-m-d 형식이므로 패턴과 일치하지 않아 None이 출력됩니다.
참고로, 정규식 문자열 앞에 r 접두사(raw string)를 붙이면 백슬래시 이스케이프 처리 문제를 피할 수 있어 권장됩니다. 또한 위 예제는 최신 파이썬 3 문법(print() 함수) 기준으로 작성되었습니다.