Signaler

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

Posez votre question KX - Dernière réponse le 12 juil. 2017 à 23:49 par Whismeril
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 
Utile
+0
plus moins
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
Whismeril 9625Messages postés mardi 11 mars 2003Date d'inscription ContributeurStatut 20 juillet 2017 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?
Répondre
KX 14600Messages postés samedi 31 mai 2008Date d'inscription ModérateurStatut 19 juillet 2017 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.
Répondre
Whismeril 9625Messages postés mardi 11 mars 2003Date d'inscription ContributeurStatut 20 juillet 2017 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"
Répondre
KX 14600Messages postés samedi 31 mai 2008Date d'inscription ModérateurStatut 19 juillet 2017 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 :-)
Répondre
Whismeril 9625Messages postés mardi 11 mars 2003Date d'inscription ContributeurStatut 20 juillet 2017 Dernière intervention - 12 juil. 2017 à 23:49
de rien, j'ai pas fait grand chose!
Répondre
Donnez votre avis

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes.

Le fait d'être membre vous permet d'avoir des options supplémentaires.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !