<分区>
这是我到目前为止形成的正则表达式:
/(?:("?(?:.*)"?)\s*)?\s<(.*@.*)>|(?:mailto:(.*@.*))|(.*@.*)/gi
You can check it out at regex101
我正在尝试从以下内容中提取“姓名”和“电子邮件”:
John Smith <john.smith@gmail.com>
John Smith <johnsmith@gmail.com>
"John Smith" <johnsmith@gmail.com>
"John" <johnsmith@gmail.com>
John Smith<johnsmith@gmail.com>
<johnsmith@gmail.com>
johnsmith@gmail.com
mailto:johnsmith@gmail.com
"John"<johnsmith@gmail.com>
To: John Smith <john.smith@gmail.com>
From: John Smith <john.smith@gmail.com>
Reply-to: john.smith@gmail.com
Return-path: <john.smith@gmail.com>
Message-id: <john.smith@gmail.com>
References: <john.smith@gmail.com>
Original-recipient: rfc822;john.smith@gmail.com
for john.smith@gmail.com
ESMTPSA id <john.smith@gmail.com>
domain of john.smith@gmail.com
envelope-from=john.smith@gmail.com
(ORCPT john.smith@gmail.com)
从头开始,我觉得我差不多了 - 但在 3 件事上遇到了麻烦:
从第一个捕获组中去除双引号
处理空白缺失变体:
John Smith<johnsmith@gmail.com>
后一个 block 的“名称”字段中的误报,所以我需要一种排除这些的方法(可能使用前面的
:
、:
、=
、for
、id
、of
?)
作为一个完整的正则表达式新手,我希望有知识渊博的人给我一些指导,告诉我如何克服这些问题。
出于好奇,不幸的是,我丢失了我的 CardDAV,因此丢失了所有联系人,所以以真正的 Linux 方式,我将通过手动解析我的整个原始 MBOX 重建电子邮件列表,按最常见的排序,然后去从那里开始。
我将使用 bash grep
或 perl sed
。
感谢您的宝贵时间!