使用正则表达式从 csv 中提取电子邮件
Email extraction from csv using regex
我有以下正则表达式:
/(.+?)((?:(?:[^<>()\[\]\.,;:\s@"]+(?:\.[^<>()\[\]\.,;:\s@"]+)*)|(?:".+"))@(?:(?:\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(?:(?:[a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,})))/gi
用于从以下不同格式中提取电子邮件地址和姓名并避免重复,
"FName LName" <fname.lname@gmail.com>, "Eg Name" <egname@gmail.com>,
Closed Call<close_call@gmail.co.um>
toys@urs.com
serima<serima@google.com>
One <one@one.com>;Two <two@two.com>; "New <new@new.com>"
有几个问题:
- 在 测试用例 #2 上
t
被修剪,只得到 oys@urs.com
,这只发生在第一个电子邮件地址上。
- 第二个捕获组 returns 名称(如果存在则与 < 如果存在一起),然后必须单独去除
<
以下任何方式提取上述内容,更多elegant/efficient方式
[{'name':'FName LName', 'email':'fname.lname@gmail.com'},
{'name':'Eg Name', 'email':'egname@gmail.com'},
{'name':'Closed Call', 'email':'close_call@gmail.co.um'}]
[{'name':'', 'email':'toys@urs.com'}]
[{'name':'serima', 'email':'serima@google.com'}]
[{'name':'One', 'email':'one@one.com'},
{'name':'Two', 'email':'two@two.com'},
{'name':'New', 'email':'new@new.com'}]
注意:名字may/maynot要用双引号括起来,名字和[=17=之间不能有may/mayspace ]
问题#1 通过让第一个捕获组更贪婪一点解决了,
/(.*?)((?:(?:[^<>()\[\]\.,;:\s@"]+(?:\.[^<>()\[\]\.,;:\s@"]+)*)|(?:".+"))@(?:(?:\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(?:(?:[a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,})))/gi
问题 #2 留到今晚做梦时用 ;-)
我有以下正则表达式:
/(.+?)((?:(?:[^<>()\[\]\.,;:\s@"]+(?:\.[^<>()\[\]\.,;:\s@"]+)*)|(?:".+"))@(?:(?:\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(?:(?:[a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,})))/gi
用于从以下不同格式中提取电子邮件地址和姓名并避免重复,
"FName LName" <fname.lname@gmail.com>, "Eg Name" <egname@gmail.com>, Closed Call<close_call@gmail.co.um>
toys@urs.com
serima<serima@google.com>
One <one@one.com>;Two <two@two.com>; "New <new@new.com>"
有几个问题:
- 在 测试用例 #2 上
t
被修剪,只得到oys@urs.com
,这只发生在第一个电子邮件地址上。 - 第二个捕获组 returns 名称(如果存在则与 < 如果存在一起),然后必须单独去除
<
以下任何方式提取上述内容,更多elegant/efficient方式
[{'name':'FName LName', 'email':'fname.lname@gmail.com'}, {'name':'Eg Name', 'email':'egname@gmail.com'}, {'name':'Closed Call', 'email':'close_call@gmail.co.um'}]
[{'name':'', 'email':'toys@urs.com'}]
[{'name':'serima', 'email':'serima@google.com'}]
[{'name':'One', 'email':'one@one.com'}, {'name':'Two', 'email':'two@two.com'}, {'name':'New', 'email':'new@new.com'}]
注意:名字may/maynot要用双引号括起来,名字和[=17=之间不能有may/mayspace ]
问题#1 通过让第一个捕获组更贪婪一点解决了,
/(.*?)((?:(?:[^<>()\[\]\.,;:\s@"]+(?:\.[^<>()\[\]\.,;:\s@"]+)*)|(?:".+"))@(?:(?:\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}])|(?:(?:[a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,})))/gi
问题 #2 留到今晚做梦时用 ;-)