Je suis pas vraiment bon en regex, mais quand j'ai besoin d'en faire je m'aide du site regex101 pour les tester/débugger. Ça m'a sorti de la purée quelques fois !
"On ne remplace pas des plombs sautés avant de savoir pourquoi ils ont sauté." 2001 l'odyssée de l'espace, Arthur C. Clarke
Le tout est d'abord d'identifier les différentes composantes de ton expression (et les classes de caractères qui les composent), et de procéder avec des sous-regex.
La première, qu'on va appeler A, ce sont les lettres, on ne va considérer ici que l'ascii, si tu as besoin d'unicode, tu prendras la classe équivalente. Lettres minuscules et majuscules, ça donne donc /[a-zA-Z]/ ;
La seconde, B, contenant les caractères de ponctuation, que l'on peut représenter par /[. '-]/ (pas besoin de les échapper ici, ils sont dans une classe et le tiret est placé à la fin, et attention dans ton expression, tu n'avais rien échappé, la plupart ont un sens spécifique dans l'expression) ;
La dernière, C, le point suivi d'un espace, qui est un cas particulier : /\. /, qu'on considérera par la suite comme un seul caractère, ce sera plus simple.
Maintenant qu'on a ces 3 sous-parties, on les assemble pour obtenir l'expression finale.
Au final, c'est quoi ton expression ?
Une suite de A, de 0 à n éléments, optionnellement suivis plusieurs fois d'un caractère de ponctuation B ou C + une nouvelle suite de A (1 ou +), à nouveau optionnellement suivis d'un caractère de ponctuation en toute fin.
C'est à dire quelque chose comme /^A*((B|C)A+)*(B|C)?$/.
Si on fait les remplacements adéquats, on obtient /^[a-zA-Z]*(([. '-]|\. )[a-zA-Z]+)*([. '-]|\. )?$/ qui n'est plus très lisible, je te conseille de garder séparément les sous-expressions et de composer la finale à l'intérieur de ton programme.
Testée et approuvée
Merci à @entwanne pour ta réponse qui m'a grandement aider!!!
@entwanne , encore une fois, je suis jaloux.
- Edité par Asakha 30 novembre 2017 à 16:49:46
Regex
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique