如何在C#中使用正则表达式拆分收件人姓名和电子邮件地址?

时间:2015-02-16 07:58:47

标签: c# regex

我有一个字符串数组,其中包含电子邮件收件人'姓名和电子邮件。要发送相关的电子邮件,我需要使用正则表达式拆分值。我是这个正则表达式领域的新手:

这是字符串数组

[ 
 "Jason D Silva <ejd@yopmail.com>",
 "Aruna Nishantha <arunan@yopmail.com>",
 "Dan Carter <dancarter@yopmail.com>"
]

我想将值拆分为Name和Email。一旦拆分正确完成,我将把它插入到列表中,如下所示:

List<KeyValuePair<string, string>> recipientList = new List<KeyValuePair<string, string>>();
  foreach (var item in recipients)
    {
        // Regex pattern 
        if (true)
         {
             //add to recipientList
         }
     }

有关正则表达式模式的任何帮助吗?

3 个答案:

答案 0 :(得分:8)

您可以使用以下正则表达式:

^(?<Name>.*)\s\<(?<Email>.*)\>$

使用此功能,您可以使用以下命令检索姓名和电子邮件地址:

var match = Regex.Match("Jason D Silva <ejd@yopmail.com>", @"^(?<Name>.*)\s\<(?<Email>.*)\>$");
var email = match.Groups["Email"].Value;
var name = match.Groups["Name"].Value;

答案 1 :(得分:1)

使用String.Substring方法正确实施

int start, end;

String[] a = {"Jason D Silva <ejd@yopmail.com>","Aruna Nishantha <arunan@yopmail.com>","Dan Carter <dancarter@yopmail.com>" };

 foreach (String item in a)
 {
       Console.WriteLine(item);

       end = item.IndexOf('<');

       Console.WriteLine(" \t Name : " + item.Substring(0, end));

       start = item.IndexOf('<');
       end = item.IndexOf('>');

       Console.WriteLine(" \t email : " + item.Substring(start + 1, end - (start + 1)));

}

输出:

"Jason D Silva <ejd@yopmail.com>"                                                                                                                                
         Name : Jason D Silva                                                                                                                                     
         email : ejd@yopmail.com                                                                                                                                  
"Aruna Nishantha <arunan@yopmail.com>"                                                                                                                            
         Name : Aruna Nishantha                                                                                                                                   
         email : arunan@yopmail.com                                                                                                                               
"Dan Carter <dancarter@yopmail.com>"                                                                                                                              
         Name : Dan Carter                                                                                                                                        
         email : dancarter@yopmail.com

答案 2 :(得分:0)

您不需要正则表达式,您可以改为使用String.Split

string[] myArray = // ...
foreach(string kv in myArray) 
{
    string[] values = kv.Split(" <");
    // to eliminate the terminating ("noisy" > at the end
    values[1] = values[1].Substring(0, values[1].IndexOf('>');
}

这当然假设你的字符串看起来总是一样。