Expression régulière avec un suffixe optionnel

Résolu/Fermé
KX - 11 juil. 2017 à 13:35
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 - 12 juil. 2017 à 23:49
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 :
PREFIX_CODE
ou
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
_SUFFIX
sont 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.
A voir également:

1 réponse

Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 928
11 juil. 2017 à 13:57
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
11 juil. 2017 à 14:05
Salut,

Le problème c'est que je ne peut pas être sûr que le code ne contiendra jamais des _ et en plus je ne suis pas sûr non plus que la première lettre du suffixe sera toujours _
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 928
12 juil. 2017 à 01:14
Ha si tu ne dis pas tout, comment veux tu qu'on s'en sorte.
Peux tu être plus précis sur ce que peut ou pas être chaque partie du texte?
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015 > Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024
12 juil. 2017 à 08:28
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 avec
prefix="ABC-"
par exemple (parce que le problème n'est pas là)
ABC-DEF_GHI-JKL-PLOP => ["DEF_GHI-JKL", "-PLOP"]
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", ""]
Bonne journée.
0
Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024 928 > KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024
12 juil. 2017 à 16:55
salut, je n'ai pas trop eu le temps d'y regarder aujourd'hui et ce soir ça va être compliqué.
Je m'y remets demain, je pense que la solution viendra avec des "lookahead assertion"
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015 > Whismeril Messages postés 19022 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 17 avril 2024
Modifié le 12 juil. 2017 à 18:34
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 par
SUFFIX
:

Pattern.compile(Pattern.quote(prefix)+"(.+)(?<!"+suffix+")("+suffix+")?$");

Merci :-)
0