Compte tenu de la chaîne suivante, je voudrais analyser dans une liste des prénoms + un nom:noms « famille » Parse dans les + nom de famille avec regex
Peter-Paul, Mary & Joël Van der Winkel
(et les versions plus simples)
Je suis en train de travailler si je peux le faire avec une expression régulière. J'ai jusqu'ici
(?:([^, &]+))[, &]*(?:([^, &]+))
Mais le problème est ici que je voudrais le nom de famille à capturer dans une capture différente.
Je pense que je suis au-delà de ce qui est possible, mais juste au cas où ...
MISE À JOUR
Extraction des captures du groupe était nouveau pour moi, donc voici le code (C#) je :
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);
je devais modifier légèrement la réponse acceptée pour l'obtenir pour couvrir des cas tels que:
Peter-Paul & Joseph Van der Winkel
Peter-Paul & Joseph Van der Winkel
Je ne vois pas de votre question si ces noms sont garantis normalisés, mais qu'en est un nom comme Peter Paul van der Winkel? (c'est-à-dire, pas de tiret, et des règles de capitalisation néerlandaises plutôt que flamandes/anglaises.) – Ruben
Bonne question. Je n'essaie pas d'être trop intelligent ici. Dans ce cas, si le résultat indique prénom = Peter et last = Paul van der Winkel, cela ne me dérange pas. L'objectif est d'avoir un moyen «rapide et brut» d'entrer les coordonnées; l'utilisateur peut toujours se rabattre sur la saisie des champs séparément. – Benjol
Mise à jour avec l'expression rationnelle pour ma réponse. – MaxVT