정규식(Regular Expression, Regex)은 특정 검색 패턴을 정의하는 문자열의 나열입니다. 이 글에서는 정규식을 활용해 이메일 주소가 유효한지 아닌지를 판별하고 필터링하는 방법을 알아보겠습니다.
먼저 다양한 형태의 이메일 주소를 담은 Pandas 시리즈를 정의한 뒤, 각 이메일이 올바른 형식인지 검사합니다. 여기서는 파이썬의 정규식 전용 라이브러리인 re 모듈을 함께 사용합니다.
처리 순서
1단계: 다양한 이메일 주소를 포함하는 Pandas 시리즈를 정의합니다. 2단계: 이메일 유효성을 검사할 정규식 패턴을 정의합니다. 3단계: re 라이브러리의 re.search() 함수로 이메일의 유효성을 확인합니다.
예제 코드
import pandas as pd
import re
series = pd.Series(['jimmyadams123@gmail.com', 'hellowolrd.com'])
regex = '^[a-z0-9]+[\._]?[a-z0-9]+[@]\w+[.]\w{2,3}$'
for email in series:
if re.search(regex, email):
print("{}: Valid Email".format(email))
else:
print("{} : Invalid Email".format(email))실행 결과
jimmyadams123@gmail.com: Valid Email hellowolrd.com : Invalid Email
정규식 패턴 해설
위 코드에서 regex 변수에 사용된 주요 기호들의 의미는 다음과 같습니다.
- ^: 문자열의 시작 위치를 나타내는 앵커입니다.
- [ ]: 대괄호는 문자 클래스(character class)를 정의하며, 괄호 안의 문자 중 하나와 일치함을 의미합니다.
- \: 이스케이프(escape) 문자로, 특수 문자를 일반 문자로 취급하게 합니다.
- .: 점(.)은 줄바꿈 문자를 제외한 임의의 한 문자와 일치합니다.
- {}: 중괄호는 반복 횟수 범위를 지정할 때 사용합니다. 예를 들어
{2,3}은 2자 이상 3자 이하를 의미합니다. - $: 달러 기호($)는 문자열의 끝 위치를 나타내는 앵커입니다.
이 패턴을 분석해 보면, 이메일은 소문자 영문자와 숫자의 조합으로 시작하고, 선택적으로 점(.) 또는 밑줄(_)을 포함할 수 있으며, 반드시 @ 기호가 있어야 하고, 그 뒤에 도메인명과 2~3자리 최상위 도메인(TLD)이 이어지는 구조임을 알 수 있습니다. 따라서 '@' 기호나 도메인이 없는 'hellowolrd.com' 같은 문자열은 유효하지 않은 이메일로 판별됩니다.