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

本文关键字:收件人 拆分 电子邮件地址 正则表达式 | 更新日期: 2024-05-25 13:16:06

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

这是字符串数组

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

我想将值拆分为"名称"answers"电子邮件"。一旦分割正确完成,我将把它插入到如下列表中:

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

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

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

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

^(?<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;

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

您不需要正则表达式,只需使用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('>');
}

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