[英]Need help with regular expression to parse a string of e-mail addresses in C#
[英]How can I group multiple e-mail addresses and user names using a regular expression
我尝试解析以下文本:
"user1@emailaddy1.com" <user1@emailaddy1.com>, "Jane Doe" <jane.doe@ addyB.org>, "joe@company.net" <joe@company.net>
我正在使用以下代码尝试拆分字符串:
Dim groups As GroupCollection
Dim matches As MatchCollection
Dim regexp1 As New Regex("""(.*)"" <(.*)>")
matches = regexp1 .Matches(toNode.InnerText)
For Each match As Match In matches
groups = match.Groups
message.CompanyName = groups(1).Value
message.CompanyEmail = groups(2).Value
Next
但是,此正则表达式很贪心,它会捕获整个字符串,直到“ joe@company.net”之后的最后一个引号。 我很难拼凑一个表达式,它将这个字符串分为我要寻找的两个组:名称(在引号中)和电子邮件(在尖括号中)。 是否有人对更改正则表达式有任何建议或建议,以获得我所需要的?
与其滚动自己的正则表达式,不如这样做:
string[] addresses = toNode.InnerText.Split(",");
foreach(string textAddress in addresses)
{
textAddress = address.Trim();
MailAddress address = new MailAddress(textAddress);
message.CompanyName = address.DisplayName;
message.CompanyEmail = address.Address;
}
虽然您的正则表达式可能适用于已显示的少数测试用例。 从长远来看,使用MailAddress
类可能会更加可靠。
正则表达式的"""([^""]*)"" <([^>]*)>"
怎么样? 即明确指出,匹配的部分将不包含引号/结束括号。 您可能还想使用更具限制性的字符范围。
您需要指定所需的最小匹配表达式。 您还可以用更精确的模式替换(。*)模式:例如,可以排除逗号和空格...通常最好避免在正则表达式中使用。*,因为这会降低性能!
例如,对于电子邮件,可以使用[\\ w-] + @([\\ w-] +。)+ [\\ w-] +等模式,也可以使用更复杂的模式。
您可以在以下网址找到一些好的模式: http : //regexlib.com/
不知道正在运行什么正则表达式引擎ASP.net,但是可以通过添加?来尝试非贪婪的变体。 在正则表达式中。
正则表达式示例
""(.*?)"" <(.*?)>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.