0) I think your email regex is rather weak. Try this one:
[a-z0-9!#$%&'*+/=?^_`{|}~-]+(?:\.[a-z0-9!#$%&'*+/=?^_`{|}~-]+)*@(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]*[a-z0-9])?
1) Why not just split the string on spaces, regex the email address, and then run the phone number through this extension method:
public static bool IsPhone(this string text)
{
bool result = true;
text = text.Replace("(","").Replace(")","").Replace("-","");
long value;
result = ((text.Length == 7 || text.Length == 10) && long.TryParse(text, out value));
return result;
}
It's unfortunate that RegEx is probably the best parser for email address validation, but for phone numbers you don't need it. if you're parsing thousands of records, you'll save considerable time using regex only once instead of twice.