如何用Python提取邮箱中带点、连字符的名称片段并写入文本文件?
解决方案
直接给你一套适配需求的Python实现,能处理CSV里带尖括号/不带尖括号的邮箱,拆分出名称片段并写入文本文件:
核心逻辑说明
- 匹配邮箱:用正则捕获所有格式的邮箱(不管有没有尖括号包裹)
- 拆分名称片段:把邮箱@前面的部分按
.和-拆分 - 去重+写入:收集所有片段并去重,避免重复内容,最后写入文本文件
完整代码
import re import csv # 匹配邮箱的正则:兼容<xxx@yyy>和xxx@yyy两种格式,捕获组1是纯邮箱地址 EMAIL_PATTERN = re.compile(r'(?:<)?([\w.-]+@[\w.-]+)(?:>)?') def extract_name_fragments_from_csv(csv_path, output_txt_path): fragments = set() # 用集合自动去重 # 读取CSV文件 with open(csv_path, 'r', encoding='utf-8') as csv_file: reader = csv.reader(csv_file) for row in reader: for cell in row: # 匹配当前单元格里的所有邮箱 emails = EMAIL_PATTERN.findall(cell) for email in emails: # 拆分邮箱的本地部分(@前面的内容) local_part = email.split('@')[0] # 按.和-拆分名称片段 parts = re.split(r'[.-]', local_part) # 添加到集合里自动去重 fragments.update(parts) # 将结果写入文本文件,每行一个片段 with open(output_txt_path, 'w', encoding='utf-8') as txt_file: for fragment in sorted(fragments): # 排序后写入更整洁 txt_file.write(f"{fragment}\n") # 调用示例:替换成你的CSV路径和输出文本路径 extract_name_fragments_from_csv('your_emails.csv', 'name_fragments.txt')
代码细节解释
- 正则
(?:<)?([\w.-]+@[\w.-]+)(?:>)?:(?:<)?和(?:>)?匹配可选的尖括号,不捕获;捕获组1提取纯邮箱地址 - 用
set存储片段:自动去重,避免重复的名称片段 - 遍历CSV的每个单元格:确保不会漏掉任何列里的邮箱
- 拆分本地部分时用
re.split(r'[.-]'):一次性按两种分隔符拆分
测试你的示例文本
如果用你提供的测试文本:
s = """ <name-name.name@domain.com>, name.name@domain.com """ emails = EMAIL_PATTERN.findall(s) # 得到 ['name-name.name@domain.com', 'name.name@domain.com'] # 拆分后得到的片段是 {'name'}
内容的提问来源于stack exchange,提问作者Droneship
相关产品推荐
相关产品推荐

