0

我将把它分解为两个操作,因为我似乎无法找出正则表达式来完成它。但是,我想我会问这里的智囊团,看看是否有人可以做到(我相信有人可以)。

本质上,我有一个字符串,其中包含来自 Exchange 电子邮件的收件人字段。我想将其解析为单个收件人。我不需要验证电子邮件或任何东西。本质上,数据是逗号分隔的,除非逗号位于一组引号之间。这就是让我搞砸的部分。

现在我正在使用:(?"[^"\r\n]*")

这给了我引用的名字,和([a-zA-Z0-9_-.]+)@(([[0-9]{1,3}.[0-9]{1,3}.[0 -9]{1,3}.)|(([a-zA-Z0-9-]+.)+))([a-zA-Z]{2,4}|[0-9]{1 ,3})

这给了我电子邮件地址

这就是我所拥有的......数据:

"George Washington" <gwashington@government.net>, "Abraham Lincoln" <alincoln@government.net>, "Carter, Jimmy" <jimmy.carter@presidents.com>, "Nixon, Richard M." <tricky.dick@presidents.com>

我想回来的是:

"George Washington" <gwashington@government.net>
"Abraham Lincoln" <alincoln@government.net>
"Carter, Jimmy" <jimmy.carter@presidents.com>
"Nixon, Richard M." <tricky.dick@presidents.com>
4

2 回答 2

1

我对交换了解不够,无法获得与任何交换收件人条目匹配的模式。

但根据过去的信息为你举个例子。我给你这个:

["][^"]+["][^",]+(?=[,]?)

这匹配所有您发布的条目。

并知道一个简单的 C# 示例如何使用:

var input = "\"George Washington\" <gwashington@government.net>, \"Abraham Lincoln\" <alincoln@government.net>, \"Carter, Jimmy\" <jimmy.carter@presidents.com>, \"Nixon, Richard M.\" <tricky.dick@presidents.com>";

var pattern = "[\"][^\"]+[\"][^\",]+(?=[,]?)";

var items = Regex.Matches(input, pattern)
    .Cast<Match>()
    .Select(s => s.Value)
    .ToList();

如果有此模式不起作用的输入文本,请在此处发布输入。

于 2013-05-08T18:30:42.973 回答
0
Regex.Match(input, @"\"[^\"]*\"\s\<[^>]*>");
于 2013-05-08T20:49:14.640 回答