您的正则表达式电子邮件根本不起作用:emails = re.findall(r'.[@]', String) 匹配 anychar 然后 @。
我会尝试一种不同的方法:匹配句子并提取名称,电子邮件与以下经验假设结合(如果您的文本更改太多,那会破坏逻辑)
- 所有名称后跟
's" 和 is 某处(使用非贪婪的 .*? 匹配介于两者之间的所有名称
-
\w 匹配任何字母字符(或下划线),只有一个点表示域(否则匹配句子的最后一个点)
代码:
import re
String = "'Jessica's email is jessica@gmail.com, and Daniel's email is daniel123@gmail.com. Edward's is edwardfountain@gmail.com, and his grandfather, Oscar's, is odawg@gmail.com.'"
print(re.findall("(\w+)'s.*? is (\w+@\w+\.\w+)",String))
结果:
[('Jessica', 'jessica@gmail.com'), ('Daniel', 'daniel123@gmail.com'), ('Edward', 'edwardfountain@gmail.com'), ('Oscar', 'odawg@gmail.com')]
转换为 dict 甚至会给你一个字典名称 => 地址:
{'Oscar': 'odawg@gmail.com', 'Jessica': 'jessica@gmail.com', 'Daniel': 'daniel123@gmail.com', 'Edward': 'edwardfountain@gmail.com'}
一般情况需要更多字符(不确定我是否详尽):
String = "'Jessica's email is jessica_123@gmail.com, and Daniel's email is daniel-123@gmail.com. Edward's is edward.fountain@gmail.com, and his grandfather, Oscar's, is odawg@gmail.com.'"
print(re.findall("(\w+)'s.*? is ([\w\-.]+@[\w\-.]+\.[\w\-]+)",String))
结果:
[('Jessica', 'jessica_123@gmail.com'), ('Daniel', 'daniel-123@gmail.com'), ('Edward', 'edward.fountain@gmail.com'), ('Oscar', 'odawg@gmail.com')]