📅  最后修改于: 2023-12-03 15:12:05.045000             🧑  作者: Mango
在开发网站和应用程序时,经常需要从用户输入中提取电子邮件地址。但是,很可能会出现用户输入不规范或者重复输入的情况。因此,需要编写程序来计算给定数组中存在的不同电子邮件。
输入:
email_list = [
"john@example.com",
"jane@example.com",
"jane@example.com",
"jane+craig@example.com",
"john@example.com",
"john@example.com",
"jane+mike@example.com",
]
输出:
[
'john@example.com',
'jane@example.com',
'jane+craig@example.com',
'jane+mike@example.com'
]
可以使用 Python 的集合(set)类型来去除列表中的重复元素。但是电子邮件的格式有些复杂,可能会包含加号(+)和点号(.)等特殊字符,因此需要对每个邮件地址进行处理。
对于每个邮件地址,可以先使用正则表达式(regular expression)提取出用户名(username)和域名(domain),然后将用户名中的加号和点号全部去除,再将用户名和域名重新结合成新的邮件地址。最后,将处理过的邮件地址添加到集合中,得到最终结果。
import re
def extract(email):
"""
从电子邮件地址中提取用户名和域名
"""
pattern = r"(?P<username>[a-zA-Z0-9._%+-]+)@(?P<domain>[a-zA-Z0-9.-]+\.[a-zA-Z]{2,})"
match = re.match(pattern, email)
return match.group("username"), match.group("domain")
def normalize(username):
"""
将电子邮件用户名中的加号和点号去除
"""
return username.replace(".", "").split("+")[0]
def unique_emails(email_list):
"""
计算给定数组中存在的不同电子邮件
"""
unique_set = set()
for email in email_list:
username, domain = extract(email)
username = normalize(username)
unique_set.add(username + "@" + domain)
return list(unique_set)
email_list = [
"john@example.com",
"jane@example.com",
"jane@example.com",
"jane+craig@example.com",
"john@example.com",
"john@example.com",
"jane+mike@example.com",
]
assert unique_emails(email_list) == [
'jane@example.com',
'jane+craig@example.com',
'jane+mike@example.com',
'john@example.com'
]
以上是一个简单的 Python 程序示例,可以用来计算给定数组中存在的不同电子邮件。程序使用了正则表达式和字符串处理等技术,能够处理电子邮件地址中的特殊字符,并且去除重复元素,得到最终结果。