如何使用Python从单个文本文件中提取多个电子邮箱ID及电话号码
从混杂文本中提取电子邮箱与手机号的Python方案
针对你提供的混有HTTP响应头与JSON用户信息的文本,提供两种可直接使用的实现方式:
方案一:通用正则匹配(无结构文本也适用)
不需要依赖文本的固定结构,直接通过正则规则匹配所有符合格式的邮箱与手机号,适合杂乱无规律的大文本场景。
import re # 正则规则可根据实际手机号/邮箱格式调整 email_pattern = r'[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+' # 手机号规则示例适配你提供的纯数字手机号片段,可自行修改适配其他格式 phone_pattern = r'\b\d{6,11}\b' # 读取文本文件,替换为你自己的文件路径 with open('你的文件路径.txt', 'r', encoding='utf-8') as f: content = f.read() # 提取所有匹配项并去重 emails = list(set(re.findall(email_pattern, content))) phones = list(set(re.findall(phone_pattern, content))) # 输出结果 print("提取到的邮箱:") for e in emails: print(e) print("\n提取到的手机号:") for p in phones: print(p) # 如需将结果保存到新文件可自行添加写文件逻辑
方案二:JSON结构解析(适配你提供的文本格式,准确率更高)
你给出的文本中所有有效信息都封装在JSON对象内,直接解析JSON字段可以避免正则误匹配,提取结果更精准。
import re import json # 读取文本文件,替换为你自己的文件路径 with open('你的文件路径.txt', 'r', encoding='utf-8') as f: content = f.read() # 提取所有JSON片段 json_strings = re.findall(r'\{.*?\}', content, re.DOTALL) emails = [] phones = [] for s in json_strings: try: data = json.loads(s) # 提取邮箱 if data.get('email'): emails.append(data['email']) # 提取手机号,自动拼接国际区号 if data.get('mobile') and data.get('phonecode'): full_phone = f"+{data['phonecode']} {data['mobile']}" phones.append(full_phone) except json.JSONDecodeError: continue # 去重 emails = list(set(emails)) phones = list(set(phones)) # 输出结果 print("提取到的邮箱:") for e in emails: print(e) print("\n提取到的手机号:") for p in phones: print(p)
样例运行结果
针对你提供的测试文本,运行方案二可得到如下输出:
- 电子邮箱列表:
- wand412@gmail.com
- dxxxxxx@yahoo.com
- xxxxxxx7@gmail.com
- axxxx@gmail.com
- dexxxx@gmail.com
- 手机号列表:
- +91 9xxxxxxx
- +1 61xxxx
- +91 73xxxxxx
内容的提问来源于stack exchange,提问作者D - Lord
相关产品推荐
相关产品推荐

