繁体   English   中英

如何使用正则表达式对多个电子邮件地址和用户名进行分组

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM