Учитывая следующую строку, я бы хотел разобрать список имен + фамилию:
Питер-Поль, Мэри и Жоэль Ван дер Винкель
(и более простые версии)
Я пытаюсь понять, смогу ли я сделать это с помощью регулярного выражения. У меня так далеко
(?:([^, &]+))[, &]*(?:([^, &]+))
Но проблема здесь в том, что я хотел бы, чтобы фамилия была записана в другом снимке.
Я подозреваю, что я за пределами возможного, но на всякий случай ...
UPDATE
Извлечение снимков из группы было для меня новым, поэтому вот код (C #), который я использовал:
string familyName = "Peter-Paul, Mary & Joël Van der Winkel";
string firstperson = @"^(?<First>[-\w]+)"; //.Net syntax for named capture
string lastname = @"\s+(?<Last>.*)";
string others = @"(?:(?:\s*[,|&]\s*)(?<Others>[-\w]+))*";
var reg = new Regex(firstperson + others + lastname);
var groups = reg.Match(familyName).Groups;
Console.WriteLine("LastName=" + groups["Last"].Value);
Console.WriteLine("First person=" + groups["First"].Value);
foreach(Capture firstname in groups["Others"].Captures)
Console.WriteLine("Other person=" + firstname.Value);
Мне пришлось немного подправить принятый ответ, чтобы он покрывал такие случаи, как:
Петр-Поль и Иосиф Ван дер Винкель
Петр-Поль и Иосиф Ван-дер-Винкель