从网址获取电子邮件地址,包括@中的@和转义字符#

时间:2015-01-15 08:49:51

标签: c# regex

我有一个Url,如下所示

http://www.mytestsite.com/TesPage.aspx?pageid=32&LangType=1033&emailAddress=myname%40gmail.com

我想从网址

获取电子邮件地址

注意

电子邮件地址可能具有@有时的转义字符。

即它可能是 myname%40gmail.com myname@gmail.com

是否有任何方法可以从网址获取电子邮件地址,例如,如果该网址具有匹配的电子邮件地址的regx并检索该值。

这是我试过的代码

string theRealURL = "http://www.mytestsite.com/TesPage.aspx?pageid=32&LangType=1033&emailAddress=myname%40gmail.com";

string emailPattern = @"^([\w\.\-]+)(((%40))|(@))([\w\-]+)((\.(\w){2,3})+)$";
  Match match = Regex.Match(theRealURL, emailPattern);
  if (match.Success)
     string campaignEmail = match.Value;

如果有人帮助解决了这里出了什么问题?

由于

2 个答案:

答案 0 :(得分:4)

如果可能,请在有特定于域的工具时使用正则表达式。

除非有理由不引用System.Web,否则请使用

var uri = new Uri(
    "http://www.mytestsite.com/TesPage.aspx?pageid=32&LangType=1033&emailAddress=myname%40gmail.com");
var email = HttpUtility.ParseQueryString(uri.Query).Get("emailAddress");

编辑:如果(由于某种原因)您不知道包含地址的参数的名称,请使用适当的工具来获取所有查询值,然后然后看看看起来像是一个电子邮件地址。

var emails = query
    .AllKeys
    .Select(k => query[k])
    .Where(v => Regex.IsMatch(v, emailPattern));

如果您想改善电子邮件正则表达式,there are plenty of answers about that already

答案 1 :(得分:0)

Rawling's answer开始回复评论

  

查询字符串参数可以变化。如何不使用查询字符串参数名称。

以下代码将在提供的输入中生成电子邮件列表(emails):

var input = "http://www.mytestsite.com/TesPage.aspx?pageid=32&LangType=1033&emailAddress=myname%40gmail.com";
var queryString = new Uri(input).Query;

var parsed = HttpUtility.ParseQueryString(queryString);

var attribute = new EmailAddressAttribute();

var emails = new List<string>();
foreach (var key in parsed.Cast<string>())
{
    var value = parsed.Get(key);
    if (attribute.IsValid(value))
        emails.Add(value);
}

Console.WriteLine(String.Join(", ", emails)); // prints: myname@gmail.com

另请参阅this answer了解电子邮件解析技术。