如何拆分包含多个电子邮箱地址的字符串?
拆分拼接的电子邮箱字符串为单个邮箱地址
你当前用re.split("(.com)", emails)的方式会将邮箱拆分为前缀和.com片段,还会产生空字符串,无法得到完整邮箱。以下两种方法可以解决问题:
方法一:直接匹配完整邮箱(推荐)
不用拆分,直接用正则匹配所有符合格式的完整邮箱:
import re emails = "person1@gmail.comperson2@gmail.comperson3@gmail.com" full_emails = re.findall(r'[\w.-]+@[\w.-]+\.com', emails) print(full_emails) # 输出: ["person1@gmail.com", "person2@gmail.com", "person3@gmail.com"]
这个正则能匹配包含字母、数字、下划线、点、连字符的用户名和域名,精准提取每个以.com结尾的完整邮箱。
方法二:用正向断言拆分
如果坚持要用re.split,可以通过正向断言定位两个邮箱的分隔位置,避免拆分邮箱本身:
import re emails = "person1@gmail.comperson2@gmail.comperson3@gmail.com" full_emails = re.split(r'(?<=\.com)(?=[a-zA-Z0-9])', emails) print(full_emails) # 输出: ["person1@gmail.com", "person2@gmail.com", "person3@gmail.com"]
(?<=\.com):后顾断言,确保拆分位置前是.com(?=[a-zA-Z0-9]):先行断言,确保拆分位置后是邮箱用户名的起始字符(字母/数字)
这样拆分的位置恰好处于两个邮箱的衔接处,不会破坏单个邮箱的完整性。
内容的提问来源于stack exchange,提问作者Bera
相关产品推荐
相关产品推荐

