using System.Text.RegularExpressions;
using System.Collections.Generic;
public static void Main()
var str = "Roberto' Jose qw'ew-qwe".Trim();
var namePat = @"[\w\-']*?\w+'?";
var patterns = new List<string>{
$@"^(?<first>{namePat})\s+(?<last>{namePat})$",
$@"^(?<last>{namePat})\s*?,\s*?(?<first>{namePat})$",
$@"^(?<first>{namePat})\s+(?<middle>{namePat})\s+(?<last>{namePat})$",
$@"^(?<last>{namePat})\s*?,\s*?(?<first>{namePat})\s+(?<middle>{namePat})$",
$@"^(?<first>{namePat})\s+(?<middle>{namePat})\s+(?<last>.+)"
var qwe = patterns.Where(x => Regex.Match(str, x).Success).Select(x => Regex.Match(str, x).Groups).ToList().First();
Console.WriteLine(qwe["first"]);
Console.WriteLine(qwe["middle"]);
Console.WriteLine(qwe["last"]);