IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Autres langages Discussion :

Problème contrôle RegEx (expressions régulières)


Sujet :

Autres langages

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2019
    Messages : 6
    Points : 3
    Points
    3
    Par défaut Problème contrôle RegEx (expressions régulières)
    Bonjour à tous,

    Je suis en train de tester une RegEx sur plusieurs clés. Ces clés sont composés de différents champs, tous séparés par des tirets ( "-").

    Le but de mon test et de sélectionner toutes les clés sauf celles qui auraient une certaine écriture (donc une exclusion). Cela fonctionne mais je n'arrive pas à contrôler le nombre de caractères que chaque champ qui suivent mon exclusion devrait contenir.

    Par exemple, ici je dis que devrais avoir une clé qui commence par un champ de 7 caractères suivit d'un tiret ("-") puis d'un champ contenant 8 caractères, etc. Mais lorsque j'arrive à l'exclusion (?!I0G), dès que j'ajoute un tiret il me signale une erreur et plus rien ne matche.

    ^.{7}-.{8}-.{3}-.{5}-(?!I0G).*$


    Auriez-vous une idée svp ?

    Je vous remercie d'avance.

  2. #2
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Pour chaque question au sujet des regex, tu dois préciser l'outil ou le langage pour lequel tu l'écris car les syntaxes et les possibilités peuvent différer. D'une manière plus générale: soit plus précise dans ta description du problème et ajoute des exemples pertinents de chaînes avec lesquelles ta pattern doit réussir ou échouer.

    Dés le début cela ne va pas: ^.{7}-.{8}-.{3}-.{5}-. Le point est censé remplacer n'importe quel caractère, ce qui inclut également le tiret. Donc ce début de pattern réussira avec une chaîne de 27 tirets consécutifs, ça m'étonnerai que ce soit ce que tu souhaites.
    À la place du point, il faut utiliser quelque chose de plus restrictif. Une classe de caractère contenant les caractères possibles entre chaque tiret serait l'idéal, mais comme je n'ai aucune idée de ce que tu veux faire, on va à la place utiliser une classe de caractère qui exclut simplement le tiret, ça devrait faire l'affaire, soit: ^[^-]{7}-[^-]{8}-[^-]{3}-[^-]{5}-.

    Maintenant, sans les précisions que je t'ai demandées, je ne peux pas t'aider plus.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2019
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    J'utilise l'outil regex101 qui est sur le web.

    Par exemple, je souhaite capturer toutes les chaînes ne contenant pas l'indice L0G en 5ème position ( BE001_G-61110000-000-00000-F0G01-00DOM-00000000-00000-0-0 : OK; BE001_G-61110000-000-00000-L0G02-00DOM-00000000-00000-0-0 : KO) tout en ayant un contrôle sur le nombre de caractères que doit contenir chacun des champs, que ce soit avant ou après l'exclusion.

  4. #4
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Ok, en fait il n'y a pas de problème particulier à faire ça. Le test avant négatif (negative lookahead) a la particularité de ne pas consommer de caractères, ce qui fait qu'une fois sa parenthèse fermée tu es toujours à la même position. Donc il n'y a pas de problème de nombre de caractères dans les champs avant ou après.
    Une subtilité cependant: si tu veux interdire le champ L0G02 dans un lookahead, il vaut mieux ajouter son délimiteur de fin dans le cas où ton 5e champ serait de taille variable, donc plutôt (?!L0G02-).

    Tes champs ont l'air d'être tous composés de caractères alphanumériques plus le souligné, donc la classe \w me semble être meilleur candidate que [^-].

    Sinon rien de particulier: ^\w{7}-\w{8}-\w{3}-\w{5}-(?!L0G02-)\w{5}-\w{5}-\w{8}-\w{5}-\w-\w$
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2019
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    Cela ne fonctionne pas avec ta solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^\w{7}-\w{8}-\w{3}-\w{5}-(?!L0G02-)\w{5}-\w{5}-\w{8}-\w{5}-\w-\w$
    Il capture toutes mes chaînes ...

  6. #6
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Pour moi cela fonctionne: https://regex101.com/r/vATpjs/1/

    Donne ton lien vers regex101 pour voir.

    (Merci d'utiliser les balises [code] pour les blocs de code ou [c] pour le code en ligne.)
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  7. #7
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2019
    Messages : 6
    Points : 3
    Points
    3

  8. #8
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Non, ça marche parfaitement et toutes les lignes ayant pour 5e champ L0G02 sont bien exclues.
    Maintenant il faudrait être plus clair dans ta demande (qui a changé entre ton premier post (I0G0) et celui où tu donnes un exemple (L0G02)): Quel 5e champ(s) veux-tu exclure au juste?
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  9. #9
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2019
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    En fait je viens de comprendre pourquoi cela fonctionne chez toi et pas chez moi.

    J'ai oublié un détail: je veux exclure toutes les chaînes ayant un 5ème champ commençant par L0G.

    Ca a l'air de fonctionner avec ça : https://regex101.com/r/JMSCO3/2

  10. #10
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Il suffit juste de modifier ton lookahead en fonction de ce que tu veux exclure et le tour est joué.

    Au passage, tu ne trouves pas que regex101 c'est un peu light pour un fichier de plus de 10000 entrées? Quelques lignes supplémentaires et il va larguer les amarres. Ça serait mieux de passer par une lecture ligne à ligne soit avec ton langage de programmation préféré, soit avec un outil comme awk (qui est aussi un langage de programmation stricto sensu)?
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  11. #11
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2019
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 25
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2019
    Messages : 6
    Points : 3
    Points
    3
    Par défaut
    C'était juste pour tester la RegEx, on va l'inclure ensuite dans un autre outil.
    Merci pour ton aide en tout cas !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [c# REGEX]Problème avec une expression régulière
    Par mezzo_998 dans le forum Windows Forms
    Réponses: 5
    Dernier message: 24/11/2007, 13h03
  2. [REGEX]Expression régulière
    Par tomca dans le forum Langage
    Réponses: 2
    Dernier message: 10/10/2005, 11h01
  3. [Regex] Expressions régulières: sous groupe
    Par debdev dans le forum Collection et Stream
    Réponses: 12
    Dernier message: 07/07/2005, 14h10
  4. [RegEx]Expression régulière
    Par Sniper37 dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 07/06/2005, 11h18
  5. Problème sur une expression régulière
    Par Verbal-Quint dans le forum Langage
    Réponses: 6
    Dernier message: 12/11/2004, 10h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo