J'ai une liste de chaînes. Certains d'entre eux sont de la forme 123-...456
. La partie variable "..." peut être:
- la chaîne "pomme" suivie d'un trait d'union, par exemple
123-apple-456
- la chaîne "banana" suivie d'un trait d'union, par exemple
123-banana-456
- une chaîne vide, par exemple
123-456
(notez qu'il n'y a qu'un seul tiret)
Tout mot autre que "pomme" ou "banane" n'est pas valide.
Pour ces trois cas, je voudrais faire correspondre respectivement "pomme", "banane" et "". Notez que je ne veux jamais capturer le trait d'union, mais je veux toujours le faire correspondre . Si la chaîne n'est pas de la forme 123-...456
décrite ci-dessus, il n'y a aucune correspondance.
Comment puis-je écrire une expression régulière pour ce faire? Supposons que j'ai une saveur qui autorise les groupes d'anticipation, de recherche, de recherche et de non capture.
L'observation clé ici est que lorsque vous avez "pomme" ou "banane", vous devez également avoir le trait d'union, mais vous ne voulez pas le faire correspondre. Et lorsque vous faites correspondre la chaîne vide, vous ne devez pas avoir le trait d'union de fin. Une expression régulière qui résume cette affirmation sera la bonne, je pense.