Menu

Expression régulière avec un suffixe optionnel [Résolu]

KX - 11 juil. 2017 à 13:35 - Dernière réponse : Whismeril 11415 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 23 avril 2018 Dernière intervention
- 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.
Afficher la suite 

7 réponses

Répondre au sujet
Whismeril 11415 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 23 avril 2018 Dernière intervention - 11 juil. 2017 à 13:57
Whismeril 11415 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 23 avril 2018 Dernière intervention - 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?
KX 15369 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 22 avril 2018 Dernière intervention > Whismeril 11415 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 23 avril 2018 Dernière intervention - 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.
Whismeril 11415 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 23 avril 2018 Dernière intervention > KX 15369 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 22 avril 2018 Dernière intervention - 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"
KX 15369 Messages postés samedi 31 mai 2008Date d'inscriptionModérateurStatut 22 avril 2018 Dernière intervention > Whismeril 11415 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 23 avril 2018 Dernière intervention - 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 :-)
Whismeril 11415 Messages postés mardi 11 mars 2003Date d'inscriptionContributeurStatut 23 avril 2018 Dernière intervention - 12 juil. 2017 à 23:49
de rien, j'ai pas fait grand chose!
Commenter la réponse de Whismeril