2016-05-16 3 views
3

Il ya une énorme liste de noms complets et je dois filtrer uniquement les noms dont le prénom dépasse 3 caractères alphabétiques et le nom de famille plus de 7 caractères alphabétiques. Le nom complet ne doit contenir que 1 prénom et 1 nom de famille séparés par un seul espace. Aucun caractère spécial n'est autorisé ni dans le prénom ni dans le nom de famille. La longueur totale du nom complet ne doit pas dépasser 26 caractères. Je n'ai aucune idée de la façon de combiner les conditions comme si je mettais le quantificateur derrière la parenthèse, il ne comparera pas la longueur du nom complet plutôt que le nombre de fois que l'expression régulière a correspondu au texte d'entrée.Single regex - correspond uniquement aux noms exactement définis

(([A-Za-z]{3,} [A-Za-z]{7,}){26} 

Cela peut être fait sûrement par plusieurs expressions rationnelles. Le plus dur est de créer une seule regex à la place, ce qui est un must.

Répondre

0

Vous pouvez utiliser un test avant:

(?=^.{1,26}$)([A-Za-z]{3,} [A-Za-z]{7,}) 

La première partie affirmera que la longueur est de 0 à 26, la deuxième est la règle correspondant au nom.

+0

Quel moteur 'regex' utilisez-vous? Apparemment '{, 26}' n'est pas un quantificateur valide dans [Perl] (http://perldoc.perl.org/perlre.html#Regular-Expressions) ou dans [PHP] (http://php.net/manual /fr/regexp.reference.repetition.php). La documentation Perl suggère que la syntaxe pourrait devenir valide à l'avenir. Cependant, je mettrais '{1,26}' là pour rendre le 'regex' valide et portable. Ou '{11,26}' pour mieux faire correspondre les longueurs minimales des composants et l'espace blanc entre eux. – axiac

0

essayer regex:

(?=^[a-z]{3,}\s[a-z]{7,}$)(.*){1,27} //global,case-insensitive 

Il utilise une affirmation look ahead longueur zéro pour satisfaire la logique état (3+ en premier lieu, un espace, 7+ dernière, rien que des lettres), et quantifié 'n'importe quoi' à consomment le nombre approprié de caractères.

regex demo here