This is a little convoluted, but I believe it is the accepted way in such a situation...
string pattern = @"^((?<displayname>[\w\s'-]+)(?<address><[\w]+@([\w\d-]+\.)+[\w]{2,4}>)(\;|$))+$";
string test = @"Richard<abc@test.com>;Leo Mark<gsg@get.com>;O'Neil Amy<oamgk@test.co.uk>;Rachel Baileys<sagle@test.net>";
if(Regex.IsMatch(test, pattern))
{
Match mx = Regex.Match(test,pattern);
for(int idx=0; idx < mx.Groups["displayname"].Captures.Count; ++idx)
{
Console.WriteLine("DisplayName: {0}, Email: {1}",
mx.Groups["displayname"].Captures[idx].Value,
mx.Groups["address"].Captures[idx].Value);
}
}
Les Potter, Xalnix Corporation,
Yet Another C# Blog