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

如何用Python提取邮箱中带点、连字符的名称片段并写入文本文件?

解决方案

直接给你一套适配需求的Python实现,能处理CSV里带尖括号/不带尖括号的邮箱,拆分出名称片段并写入文本文件:

核心逻辑说明

  1. 匹配邮箱:用正则捕获所有格式的邮箱(不管有没有尖括号包裹)
  2. 拆分名称片段:把邮箱@前面的部分按.和-拆分
  3. 去重+写入:收集所有片段并去重,避免重复内容,最后写入文本文件

完整代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 00:55:14