C# 使用带有?主题和&;的正则表达式识别电子邮件;体参数

C# 使用带有?主题和&;的正则表达式识别电子邮件;体参数,c#,regex,C#,Regex,我的电子邮件字符串看起来像这样 reply.2542A7CD0.EDB.2B.EAE39628@spam-email.co.uk?subject='Unsubscribe LIST email@provider.com'&body=Unsubscribe 我目前正在使用以下正则表达式从字符串中获取电子邮件地址。它目前仅在?subject和body参数不存在的情况下才能正常工作 string pat = @"^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A

我的电子邮件字符串看起来像这样

reply.2542A7CD0.EDB.2B.EAE39628@spam-email.co.uk?subject='Unsubscribe LIST email@provider.com'&body=Unsubscribe
我目前正在使用以下正则表达式从字符串中获取电子邮件地址。它目前仅在
?subject
body
参数不存在的情况下才能正常工作

string pat = @"^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9_]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$";
我试图从上面摘录电子邮件、主题和正文。因此,使用提供的示例,输出应为:

email = reply.2542A7CD0.EDB.2B.EAE39628@spam-email.co.uk
subject = Unsubscribe LIST email@provider.com
body = Unsubscribe
但是,由于存在
?subject
&body
,因此上述正则表达式没有命中。例如,当只有电子邮件存在时,上述正则表达式有效<代码>reply.2542A7CD0.EDB.2B。EAE39628@spam-email.co.uk

我需要一个适用于两种场景的解决方案

  • 当只有电子邮件地址存在时
  • 当电子邮件地址+?主题参数存在时
  • 当电子邮件地址+?主题+&正文参数存在时
整个代码

var email_string = Regex.Match(header, @"(?<=\<mailto:).[^>]*").Value;

string pat = @"^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9_]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}$";

var email = Regex.Match(email_string, pat).Value;
var subject = Regex.Match(email_string, "(?<=subject=).[^&]*").Value;
var body = Regex.Match(email_string, "(?<=body=).[^&]*").Value;

var email\u string=Regex.Match(header,@)(?您的正则表达式以$结尾。这意味着您的表达式必须匹配整行。这应该可以:

^(([A-Za-z0-9]+_+)|([A-Za-z0-9]+\-+)|([A-Za-z0-9]+\.+)|([A-Za-z0-9]+\++))*[A-Za-z0-9_]+@((\w+\-+)|(\w+\.))*\w{1,63}\.[a-zA-Z]{2,6}

如果您想要非正则表达式解决方案,请查看以下代码:

可以看到一个工作示例。

这将使用
string.split(params char[])
简单地拆分字符串,并确定所需内容。


警告-仅当初始字符串的格式与给定示例完全相同时,此选项才有效。

您可以使用以下正则表达式:

(?<email>^[^?]*)\?(?:subject='(?<subject>[^']*)')?(?:&?body=(?<body>.*))?
(?^[^?]*)\?(?:subject='(?[^']*))?(?:&?body=(?*))?

请参见

类似的内容?这不起作用。主题和正文参数并不总是存在。有时它只是电子邮件地址。我需要一个通用的解决方案来满足这两种情况。@JakeEvans然后您可以使用
(?<email>^[^?]*)\?(?:subject='(?<subject>[^']*)')?(?:&?body=(?<body>.*))?