RegEx, nom et prénom
Résolu
yinkoh
Messages postés
3
Date d'inscription
Statut
Membre
Dernière intervention
-
yinkoh Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
yinkoh Messages postés 3 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je souhaite faire une modification sur les chaines de nom & prénom sur le modèle suivant:
le nom ne doit pas contenir de double caractère spécial (Espace, tiret, ...)
le prénom doit avoir des tirets au lieu d'espace pour les noms composés
enfin la partie qui me pose soucis, je souhaite mettre en majuscule la première lettre de chaque nom/prénom composé.
Une âme charitable aurait-elle les connaissances en regex qui me font défaut ?
D'avance, merci.
Je souhaite faire une modification sur les chaines de nom & prénom sur le modèle suivant:
le nom ne doit pas contenir de double caractère spécial (Espace, tiret, ...)
le prénom doit avoir des tirets au lieu d'espace pour les noms composés
enfin la partie qui me pose soucis, je souhaite mettre en majuscule la première lettre de chaque nom/prénom composé.
Une âme charitable aurait-elle les connaissances en regex qui me font défaut ?
D'avance, merci.
A voir également:
- Regex nom
- Nom de compte steam exemple - Forum Jeux vidéo
- Changer nom iphone - Guide
- Nom animal - Télécharger - Études & Formations
- Nom snap - Guide
- Nom sonnerie iphone - Forum iPhone
2 réponses
Salut,
Je pense que oui. Mais il me faudrait quelques précisions.
- Quel langage utilises-tu ? Perso , Python, mais les regex sont quasi identiques pour tous les langages et Python est tellement facile à lire que je donnes les codes en Python. Ça te va?
- qu'est ce que tu entends par "double caractère spécial" ? Qu'il n'y ait pas deux tirets qui se suivent, par exemple ? ou qu'il n'y ait pas deux tirets dans toute la chaîne ?
- d'après ceci:
« Je souhaite faire une modification sur les chaines de nom & prénom » , je conclus que ce qui doit être traité est une chaîne avec nom et prénom, c'est à dire qu'il n'y a pas à la chercher au milieu d'une chaîne plus longue. C'est bien ça ?
-- que signifie :
« le prénom doit avoir des tirets au lieu d'espace pour les noms composés » ?
C'est un remplacement des espaces par des tirets ? ou une vérification ? qu'il faut faire ?
Dans les deux cas, il y a une difficulté: comment reconnait on que des portions de chaînes sont des parties d'un prénom composé ou d'un nom ? Les noms peuvent aussi ëtre composés, et dans "pierre henri simon", par exemple, le prénom est-il "pierre" ou "pierre-henri" ?
Je reviens dans un moment avec un code.
Je pense que oui. Mais il me faudrait quelques précisions.
- Quel langage utilises-tu ? Perso , Python, mais les regex sont quasi identiques pour tous les langages et Python est tellement facile à lire que je donnes les codes en Python. Ça te va?
- qu'est ce que tu entends par "double caractère spécial" ? Qu'il n'y ait pas deux tirets qui se suivent, par exemple ? ou qu'il n'y ait pas deux tirets dans toute la chaîne ?
- d'après ceci:
« Je souhaite faire une modification sur les chaines de nom & prénom » , je conclus que ce qui doit être traité est une chaîne avec nom et prénom, c'est à dire qu'il n'y a pas à la chercher au milieu d'une chaîne plus longue. C'est bien ça ?
-- que signifie :
« le prénom doit avoir des tirets au lieu d'espace pour les noms composés » ?
C'est un remplacement des espaces par des tirets ? ou une vérification ? qu'il faut faire ?
Dans les deux cas, il y a une difficulté: comment reconnait on que des portions de chaînes sont des parties d'un prénom composé ou d'un nom ? Les noms peuvent aussi ëtre composés, et dans "pierre henri simon", par exemple, le prénom est-il "pierre" ou "pierre-henri" ?
Je reviens dans un moment avec un code.
import re from string import capitalize patdbl = re.compile('[^a-zA-Z ]{2,}') for ch in ('sybille dupont','jean francois regis', 'isidore--parfait marechal', 'justine emma dingdong', 'jim john whistel poot', 'edgar-firmin lavallee'): if patdbl.search(ch): print '* deux caracteres identiques successifs dans : '+ch else: li = map(capitalize,ch.replace('-',' ').split()) res = '-'.join(li[0:-1]) + ' ' + li[-1] print res
Résultat:
Sybille Dupont Jean-Francois Regis * deux caracteres identiques successifs dans : isidore--parfait marechal Justine-Emma Dingdong Jim-John-Whistel Poot Edgar-Firmin Lavallee
Avec la fonction capitalize() de Python, il n'y a pas besoin de beaucoup de regex. Il doit bien y avoir une capitalize() dans le langage que tu utilises.
ch.replace('-',' ') remplace un éventuel tiret par un blanc pour que split() sépare deux prénoms dans un prénom composé afin que les deux initiales des deux prénoms soient également mises en majuscules
Pour pouvoir faire quelque chose, j'ai aussi supposé que la chaîne traitée est toujours du format:
'un ou plusieurs prénoms' 'un seul nom'
d'où le li[0:-1])
C'est pas terrible comme code, il me manque de savoir ce que tu veux faire exactement.
Merci de ta réponse, j'utilise php et je veux traiter les noms & prénoms avant de les insérer dans une bdd avec mysql.
Le nom & le prénom sont récupérés au moyen de deux variables distinctes.
La fonction capitalize() n'existe pas en php mais je me la suis déjà crée.
Oui il s'agit bien d'un remplacement d'espace par des tirets.
Par caractère spécial j'entends effectivement tout ce qui n'est pas 'alpha'.
Je souhaite (après remplacement) ne pas avoir de double tiret par exemple.
Merci
Le nom & le prénom sont récupérés au moyen de deux variables distinctes.
La fonction capitalize() n'existe pas en php mais je me la suis déjà crée.
Oui il s'agit bien d'un remplacement d'espace par des tirets.
Par caractère spécial j'entends effectivement tout ce qui n'est pas 'alpha'.
Je souhaite (après remplacement) ne pas avoir de double tiret par exemple.
Merci