正则表达式捕获在一些特殊字符串之后开始的电子邮件ID

时间:2017-04-14 12:02:54

标签: regex

我有很多thunderbird导出的文件。我需要从每个文件中收集电子邮件ID 。所有电子邮件都是退回的电子邮件ID,这就是为什么我们需要从系统中删除它们。

字符串

Reporting-MTA: dsn; a27-19.smtp-out.us-west-2.amazonses.com

Action: failed
Final-Recipient: rfc822; mrinalkantighosh005@gmail.com

Diagnostic-Code: smtp; 550-5.1.1 The email account that you tried to reach does not exist. Please try

每个电子邮件ID都以Final-Recipient开头:rfc822; mrinalkantighosh005@gmail.com

因此格式为Final-Recipient: rfc822; EMAIL_ID_HERE

你能告诉我正则表达式提取电子邮件ID吗?

提前致谢。

更新
我能够提取所有的电子邮件ID。此正则表达式正在选择所有电子邮件ID: -

(?:[a-z0-9!#$%&'+/=?^_{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_{|}~-]‌​+)*|"(?:[\x01-\x08\x‌​0b\x0c\x0e-\x1f\x21\‌​x23-\x5b\x5d-\x7f]|\‌​[\x01-\x09\x0b\x‌​0c\x0e-\x7f])")@(?:(‌​?:[a-z0-9](?:[a-z0-9‌​-]*[a-z0-9])?\.)+[a-‌​z0-9](?:[a-z0-9-]*[a‌​-z0-9])?|[(?:(?:‌​25[0-5]|2[0-4][0-9]|‌​[01]?[0-9][0-9]?)\.)‌​{3}(?:25[0-5]|2[0-4]‌​[0-9]|[01]?[0-9][0-9‌​]?|[a-z0-9-]*[a-z0-9‌​]:(?:[\x01-\x08\x0b\‌​x0c\x0e-\x1f\x21-\x5‌​a\x53-\x7f]|\[\x‌​01-\x09\x0b\x0c\x0e-‌​\x7f])+)])

但我只需要捕获在“最终收件人:rfc822”之后开始的电子邮件ID字符串。

2 个答案:

答案 0 :(得分:1)

为了匹配你想要的东西你可以使用 look-behind 断言。由于这个断言有zero-length并且不匹配任何东西,你可以在你的后视断言之后放置你的模式。像这样:

(?<=Final-Recipient: ).*com

  

请注意
  这不是匹配电子邮件的合适模式我只是   希望你看到后面的断言

答案 1 :(得分:0)

完美无缺: -

(?(?<=Final-Recipient: rfc822;).[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*|"(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*")@(?:(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[a-z0-9-]*[a-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])