Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Pandas 시리즈에서 정규식(Regex)으로 유효한 이메일 필터링하기

정규식(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' 같은 문자열은 유효하지 않은 이메일로 판별됩니다.