연습 문제: 보러 가기
다음 소스 코드를 완성하여 주어진 이메일 주소가 올바른지 판단하도록 만드세요. emails 리스트에서 앞의 다섯 개는 올바른 형식이며 마지막 세 개는 잘못된 형식입니다.
import re
p = re.compile(___________________________________)
emails = ['python@mail.example.com', 'python+kr@example.com', # 올바른 형식
'python-dojang@example.co.kr', 'python_10@example.info', # 올바른 형식
'python.dojang@e-xample.com', # 올바른 형식
'@example.com', 'python@example', 'python@example-com'] # 잘못된 형식
for email in emails:
print(p.match(email) != None, end=' ')
True True True True True False False False
'^[a-zA-Z0-9+-_.]+@[a-zA-Z0-9-]+.[a-zA-Z0-9-.]+$'
이메일은 계정@도메인.최상위도메인 형식이며 계정에 +, -, _, . 등의 문자를 붙이기도 합니다. 또한, 도메인에 - 문자를 사용할 수 있고, 최상위 도메인이 여러 단계일 수도 있습니다. 이러한 규칙에 맞추어서 정규표현식을 작성합니다.
^[a-zA-Z0-9+-_.]+@
는 이메일에서 @
을 기준으로 계정을 나타내며 앞에 ^
가 붙었으므로 계정이 맨 앞에 오는지 판단합니다.
또한, [a-zA-Z0-9+-_.]+
와 같이 영문 대소문자, 숫자, +, -, _, .
으로 되어 있어야 하고 문자 1개 이상
인지 판단합니다.
[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$
는 도메인과 최상위 도메인(TLD)를 나타냅니다.
먼저 [a-zA-Z0-9-]+
와 같이 영문 대소문자, 숫자, -이면서 문자 1개 이상인지 판단합니다.
그리고 중간에 \.
를 넣어서 도메인.최상위도메인 형식인지 판단합니다.
여기서 .
은 정규표현식에 사용하는 특수 문자이므로 앞에 반드시 \를 붙여야 합니다.
특히 최상위 도메인은 여러 단계일 수도 있으므로 [a-zA-Z0-9-.]+$
와 같이 범위에 .을 넣어줍니다. 또한, $를 붙여서 최상위 도메인이 마지막에 오는지 판단합니다.