You can use named matched groups for this:
var item = " john smith (idjs) <js@email.com>";
String[] patternArr =
{
"(?:\\s*)",
"(?<fullname>[a-zA-Z\\s]*?[a-zA-Z])", // captures the full name part
"(?:\\s*)",
"(?<idjs>\\([a-zA-Z]*\\))", // captures the idjs part
"(?:.*)",
"(?<email>(?:<).*@.*(?:>))" // captures the email part
};
var pattern = String.Join("", patternArr);
var m = Regex.Match(item, pattern);
if (m.Success)
{
Console.WriteLine("fullname: {0}", m.Groups["fullname"]);
Console.WriteLine("idjs: {0}", m.Groups["idjs"]);
Console.WriteLine("email: {0}", m.Groups["email"]);
}
Output:
fullname: john smith
idjs: (idjs)
email: <js@email.com>
Demo: https://dotnetfiddle.net/y6U5j4