Expression régulière avec un suffixe optionnel
Résolu
KX
-
Utilisateur anonyme -
Utilisateur anonyme -
Bonjour,
Je sèche sur une expression régulière à première vue assez simple mais je ne vois pas comment le faire...
J'ai un code qui peut avoir deux formes :
Je veux récupérer le code et savoir si le suffixe est présent.
Mon expression régulière actuelle :
Problème : dans le cas où le préfixe est présent
Du coup le code est faux et l'indication sur la présence du suffixe aussi...
Remarque :
Est-ce que vous avez une idée ? (simple si possible)
Merci.
Je sèche sur une expression régulière à première vue assez simple mais je ne vois pas comment le faire...
J'ai un code qui peut avoir deux formes :
PREFIX_CODEou
PREFIX_CODE_SUFFIX.
Je veux récupérer le code et savoir si le suffixe est présent.
Mon expression régulière actuelle :
^PREFIX_(.+)(_SUFFIX)?$
Problème : dans le cas où le préfixe est présent
(.+)va récupérer
CODE_SUFFIX!
Du coup le code est faux et l'indication sur la présence du suffixe aussi...
Remarque :
PREFIX_et
_SUFFIXsont des variables dans le programme.
pattern = Pattern.compile(Pattern.quote(prefix) + "(.+)(" + Pattern.quote(suffix) + ")?$");
Est-ce que vous avez une idée ? (simple si possible)
Merci.
1 réponse
-
Bonjour
en supposant que le code ne peut pas contenir de _
http://regexstorm.net/tester?p=%5EPREFIXE_%28%5B%5E_%5D%2B%29%28_SUFIXE%29&i=PREFIXE_12345678SDERFYHGVBLIUHKMO%C2%A7%2F.%3F%3FO%C2%A3_SUFIXE
voir l'onglet Table-
-
-
En fait cette contrainte je l'avais exposé en disant que PREFIX et SUFFIX étaient des variables, ce qui explique que je ne sais pas ce qu'elles contiennent.
Cependant ce n'est pas tout à fait exact, car SUFFIX est figé, bien qu'il puisse avoir deux formes[_\-]PLOP
. Par contre pour le reste, champs texte libre...
pattern = Pattern.compile(Pattern.quote(prefix) + "(.+)([_\-]PLOP)?$");
Exemples avecprefix="ABC-"
par exemple (parce que le problème n'est pas là)ABC-DEF_GHI-JKL-PLOP => ["DEF_GHI-JKL", "-PLOP"]
Bonne journée.
ABC-DEF_GHI-JKL_PLOP => ["DEF_GHI-JKL", "_PLOP"]
ABC-DEF_GHI-JKL => ["DEF_GHI-JKL", ""]
ABC-DEF_GHI-PLOP-JKL => ["DEF_GHI-PLOP-JKL", ""] -
-
Je viens de regarder les "lookahead assertion" que je ne connaissais pas du tout et effectivement ça permet de résoudre mon problème en rajoutant un
(?<!SUFFIX)
pour garantir que le(.+)
ne termine pas parSUFFIX
:
Pattern.compile(Pattern.quote(prefix)+"(.+)(?<!"+suffix+")("+suffix+")?$");
Merci :-)
-