1

我正在 csharp 中建立一个代理,我的任务之一是在 http 标头中查找电子邮件,问题是在我得到的数据中我收到 %40 而不是@,谁能告诉我如何在何时检测电子邮件邮件地址中的 @ 被替换为 %40?这是我在给定字符串中获取电子邮件地址的代码(使用 @ 而不是 %40) 代码

  string regexPattern = @"[A-Za-z0-9._%-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,4}";
  Regex regex = new Regex(regexPattern);
  MatchCollection matches = regex.Matches(this._context.Request.Headers[i]);
  foreach (Match match in regex.Matches(this._context.Request.Headers[i]))
  {// any email address should be printed 
         Console.WriteLine(match.Value);
  }
4

3 回答 3

2

不确定我是否理解你的问题。你为什么不直接用@%40提供的正则表达式替换?所以:

string regexPattern = @"[A-Za-z0-9._%-]+%40[A-Za-z0-9.-]+\.[A-Za-z]{2,4}";
于 2012-06-15T21:54:43.177 回答
1

在通过正则表达式运行数据之前,对您的数据进行URL 解码:

regex.Matches(this._context.Server.UrlDecode(this._context.Request.Headers[i]))

或者:

regex.Matches(HttpUtility.UrlDecode(this._context.Request.Headers[i]))
于 2012-06-15T22:04:38.150 回答
0

使用 OR (|) 允许 @ 或 "%40"

[A-Za-z0-9._%-]+(@|%40)[A-Za-z0-9.-]+.[A-Za-z]{2,4}

于 2012-06-15T21:57:10.923 回答