Учитывая следующую строку, я хотел бы разобрать в список имен + фамилия:Parse «семья» имена в человек + Фамилия с регулярными выражениями
Peter-Paul, Mary & Жоэль Ван-дер-Винкель
(и более простые версии)
Я пытаюсь работать, если я могу сделать это с помощью регулярных выражений. У меня так далеко
(?:([^, &]+))[, &]*(?:([^, &]+))
Но проблема в том, что мне хотелось бы, чтобы фамилия была захвачена в другом захвате.
Я подозреваю, что я за то, что это возможно, но только в том случае, ...
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);
мне пришлось немного подправить принятый ответ, чтобы получить его, чтобы охватить такие случаи, как:
Peter-Paul & Джозеф Ван-дер-Винкель
Peter-Paul & Джозеф Ван-дер-Винкель
Я не могу видеть из вашего вопроса, если эти имена гарантированно нормализуется, но как насчет имени, как Питер Пауль ван дер Винкель? (т. е. не дефис, а голландские, а не фламандские/английские правила капитализации). – Ruben
Хороший вопрос. Я не пытаюсь быть слишком умным здесь. В этом случае, если результат говорит firstname = Peter и lastname = Paul van der Winkel, я не против. Цель состоит в том, чтобы ввести «быстрый и грубый» способ ввода контактной информации; пользователь может всегда отступать от ввода полей отдельно. – Benjol
Обновлено с регулярным выражением для моего ответа. – MaxVT