You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对first.last@domain.com格式邮件列表去重、转驼峰式?

问题解决:提取唯一邮箱用户名并转换为CamelCase格式

核心问题分析

  1. TypeError 触发原因:你在调用re.match时传入了列表dup_email_list,但正则匹配函数要求传入字符串类型的单个对象,而非列表。
  2. 用户名提取逻辑错误:原正则表达式[a-z]{1}[.]{1}[a-z]{1}只能匹配单个字母+点+单个字母的片段,无法完整提取first.last格式的用户名。
  3. 去重效率低:原代码用循环判断去重,不如直接用Python集合自动去重简洁高效。
  4. CamelCase转换逻辑混乱:原代码存在未定义变量i、语法错误len.update_list[i]等问题,且未正确拆分用户名进行格式转换。

修正后的完整代码

import re

email_list = []
domain_gmail = []
domain_outlook = []

# 收集邮箱输入
while True:
    input_string = input('输入名、姓、9位ID和邮箱域名(用逗号分隔,输入done结束): ')
    if input_string.strip().lower() == 'done':
        break
    
    input_list = [x.strip() for x in input_string.split(',')]
    # 校验输入格式是否完整
    if len(input_list) != 4:
        print('输入格式错误,请按要求输入:名, 姓, ID, 域名')
        continue
    
    first_name, last_name, user_id, domain = input_list
    
    # 校验ID有效性
    if not (user_id.isdigit() and len(user_id) == 9):
        print('ID无效,必须是9位数字')
        continue
    
    # 校验域名有效性
    if domain not in ['gmail', 'outlook']:
        print('域名无效,只能是gmail或outlook')
        continue
    
    # 生成邮箱并转小写
    email = f"{first_name.lower()}.{last_name.lower()}@{domain}.com"
    email_list.append(email)
    # 按域名分类
    if domain == 'gmail':
        domain_gmail.append(email)
    else:
        domain_outlook.append(email)

# 去重处理:用集合自动去重后转列表
unique_emails = list(set(email_list))
unique_gmail = list(set(domain_gmail))
unique_outlook = list(set(domain_outlook))

# 提取唯一用户名到update_list
update_list = []
for email in unique_emails:
    # 方法1:用split截取@前的部分(简洁高效)
    username = email.split('@')[0]
    # 方法2:用正则捕获(可选,适合复杂格式)
    # match_result = re.match(r'^(.+)@', email)
    # if match_result:
    #     username = match_result.group(1)
    update_list.append(username)

# 转换为CamelCase格式
camel_list = []
for username in update_list:
    first, last = username.split('.')
    camel_case = first.capitalize() + last.capitalize()
    camel_list.append(camel_case)

# 输出结果
print('去重后的邮箱列表:', unique_emails)
print('按域名分组:', f'Gmail: {unique_gmail}', f'Outlook: {unique_outlook}', sep='\n')
print('提取的唯一用户名:', update_list)
print('CamelCase格式列表:', camel_list)

关键优化点

  • 输入校验逻辑优化:增加输入格式完整性校验,避免索引越界错误。
  • 自动去重:利用集合set()的特性,一行代码完成去重,替代原循环判断。
  • 用户名提取:用split('@')[0]简单高效截取用户名,正则方案作为复杂格式场景的可选补充。
  • CamelCase转换:拆分用户名后,用capitalize()方法将每个部分首字母大写,直接拼接成目标格式。

内容的提问来源于stack exchange,提问作者Crimson

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 21:10:38