J'ai une liste de chaînes. Certaines d'entre elles sont de la forme 123-...456
. La partie variable "..." peut être :
- la chaîne "apple" suivie d'un trait d'union, par exemple
123-apple-456
- la chaîne "banane" suivie d'un trait d'union, par exemple
123-banana-456
- une chaîne vide, par exemple
123-456
(noter qu'il n'y a qu'un seul trait d'union)
Tout mot autre que "pomme" ou "banane" est invalide.
Dans ces trois cas, j'aimerais faire correspondre "apple", "banana" et "", respectivement. Notez que je ne veux jamais capturer le trait d'union, mais je veux toujours correspondre il. Si la chaîne n'est pas de la forme 123-...456
comme décrit ci-dessus, il n'y a pas de correspondance du tout.
Comment écrire une expression régulière pour faire cela ? Supposons que j'ai une saveur qui autorise les groupes lookahead, lookbehind, lookaround et non-capturing.
L'observation clé ici est que lorsque vous avez une "pomme" ou une "banane", vous avez doit également ont le trait d'union de fin, mais vous ne voulez pas le faire correspondre. Et lorsque vous faites correspondre la chaîne vide, vous ne doit pas ont un trait d'union à la fin. Une regex qui encapsule cette assertion sera la bonne, je pense.
0 votes
Vous voulez que tout corresponde, sauf les traits d'union ?
0 votes
J'ai un exemple beaucoup plus simple, j'ai me@company.org et je veux faire correspondre la société afin de la remettre pour un traitement ultérieur.