解析邮箱地址

1. 实战目标

编写一段python程序与用户交互,允许用户输入一个邮箱地址,程序需判断邮箱是否合法,若合法则分解出邮箱的username部分和domain部分。

对邮箱地址,有如下要求

  1. username部分即@前面的那一部分,必须由英文字母,数字,减号(-), 下划线(_) 组成,长度至少为1
  2. domain部分即@后面的部分,必须有一个. 符号,点后面的后缀只能有英文字母组成,长度最少是2, 带前面的部分由英文字母,数字,减号构成,长度至少为1
  3. username和 domain部分使用@连接

2 考察知识点

  1. 正则表达式
  2. input
  3. 字符串切片操作

3 思路讲解与实现

3.1 正则表达式判断邮箱地址是否合法

regex = r'\b[A-Za-z0-9_-]+@[A-Za-z0-9-]+\.[A-Z|a-z]{2,}\b'

按照如下解释来理解这个正则表达式

  1. \b 匹配单词的开始或结束
  2. [A-Za-z0-9_-] A-Z 表示从A到Z的26个英文字母,a-z表示从a到z的26个英文字母,0-9表示从0到9的是10个数字,_ 和 - 分别表示下划线和减号,用中括号将它们包裹,表示的是一个范围,这个范围前面已经解释过了
  3. 紧跟在中括号后面的+ 表示重复1次或者更多次,中括号里的内容是一个范围,这个范围是A-Z,a-z,0-9,_,- 这里面的字符重复1次或者多次
  4. @ 是邮箱中必须出现的字符
  5. [A-Za-z0-9-]+ 表示A-Z,a-z, 0-9,- 重复一次或者多次
  6. \. 表示转义,因为.自身在正则表达式里表示任意字符,那么要想表示出. ,就必须使用\.
  7. [A-Za-z]{2,} , 后缀部分,只能由英文字母组成,{2,} 表示重复次数至少是2

根据正则表达式,可以写出判断邮箱地址合法性的函数

def is_valid_email(email):
    regex = r'\b[A-Za-z0-9_-]+@[A-Za-z0-9-]+\.[A-Za-z]{2,}\b'
    if re.fullmatch(regex, email):
        return True

    return False

3.2 与用户交互

email = input("请输入一个邮箱地址:")

input函数接收用户在终端的输入,返回一个字符串,程序运行到这行代码时,会在这里暂停,等待用户输入,当用户输入一个回车时,这行代码运行结束,将用户的输入作为字符串返回,赋值给email变量

3.3 分解邮箱

@符号前面的部分是用户名,后面的部分是邮箱的domain, 字符串的index方法可以返回子串开始的索引位置

email.index('@')    # @的索引位置

通过切片操作,可以得到用户名和domain部分

username = email[0:email.index('@')]
domain = email[email.index('@')+1: ]
print(f"邮箱用户名是: {username}")
print(f"邮箱域名是: {domain}")

4 完整代码

import re

def is_valid_email(email):
    regex = r'\b[A-Za-z0-9_-]+@[A-Za-z0-9-]+\.[A-Za-z]{2,}\b'
    if re.fullmatch(regex, email):
        return True

    return False


email = input("请输入一个邮箱地址:")

if is_valid_email(email):
    username = email[0:email.index('@')]
    domain = email[email.index('@')+1: ]
    print(f"邮箱用户名是: {username}")
    print(f"邮箱域名是: {domain}")
else:
    print("不合法的邮箱")

扫描关注, 与我技术互动

QQ交流群: 211426309

加入知识星球, 每天收获更多精彩内容

分享日常研究的python技术和遇到的问题及解决方案