正则表达式查找所有电子邮件匹配帮助C#应用程序

时间:2009-11-26 14:59:12

标签: c# regex

我有一个应用程序,我需要解析一个字符串来查找该字符串中的所有电子邮件地址。无论如何我不是一个常规的表达者,也不确定某些表达方式之间的区别。我找到了两个表达式,显然会匹配字符串中的所有电子邮件地址。我不能在我的C#应用​​程序中工作。以下是表达式:

/\b([A-Z0-9._%-]+)@([A-Z0-9.-]+\.[A-Z]{2,4})\b/i

^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$

以下是一个示例字符串:

Adam
<mailto:aedwards@domain.com?subject=Your%20prospect%20Search%20-%20ID:
%2011111>  Edwards - Prospect ID: 11111, Ph: (555) 555-5555 
Al
<mailto:Al@anotherdomain.com?subject=Your%20prospect%20Search%20-%20
ID:%20222222>  Grayson - Prospect ID: 222222, Ph: 
Angie 

以下是c#中的代码:

var mailReg = new Regex(EmailMatch, RegexOptions.IgnoreCase | RegexOptions.Multiline);
var matches = mailReg.Matches(theString);

3 个答案:

答案 0 :(得分:3)

第一个正则表达式是Perl对象(由斜杠分隔)。删除斜杠和模式修饰符(i),它应该起作用:

EmailMatch = @"\b([A-Z0-9._%-]+)@([A-Z0-9.-]+\.[A-Z]{2,6})\b"

此外,.museum是一个有效的域名,因此{2,6}会更好。

第二个正则表达式只匹配除了电子邮件地址之外的所有字符串。

我会保持\b完好无损。

答案 1 :(得分:2)

如果从两端删除\ b,则两个示例中的第一个应该可以正常工作。 \ b表示它需要在电子邮件地址之前和之后的单词边界(空格,行尾和&amp; c。),并且在您的情况下不存在。

(请不要使用你新发现的邪恶力量。)

答案 2 :(得分:2)

该表达式起作用:([a-zA-Z0-9 _-。] +)@([a-zA-Z0-9 _-。] +)。([a-zA-Z] {2,5} )

感谢您的期待!