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

Langages Discussion :

Regex pour matcher "abc.bcd.efgh.ChaineFinale"


Sujet :

Langages

  1. #1
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2013
    Messages : 18
    Points : 15
    Points
    15
    Par défaut Regex pour matcher "abc.bcd.efgh.ChaineFinale"
    Bonjour à tous,

    Je recherche une regex qui matche des chaines de type :

    "aaa.bcd.efgh.ChaineFinale"

    où ChaineFinale est une constante et aaa.bcd.efgh. est une suite variable de chaine composée de n'importe quelle suite de caractères (excepté les espaces) terminée par un '.' :

    xxx.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    string sPatternDataTable = @"([^\s]\.)*ChaineFinale";
     
    Regex regexObj;
    regexObj = new Regex(sPatternDataTable, RegexOptions.IgnoreCase | RegexOptions.Multiline | RegexOptions.Singleline);
     
    string sContent = "aaa.bcd.efgh.ChaineFinale";
     
    Match match = regexObj.Match(sContent);
     
                if (match.Success)
                {
                    string sProc = "Success";
                }
    Mais cette regex ne fonctionne pas et Match.Success retourne false.

    Merci beaucoup par avance.

    Eric.

  2. #2
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 758
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2016
    Messages : 2 758
    Points : 10 541
    Points
    10 541
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    Tu n'étais pourtant pas loin, une simple erreur au niveau de ton expression régulière :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string sPatternDataTable = @"([^\s]+\.)*ChaineFinale";
    Il manquait un + juste après [^\s]. Sans le plus, l'expression régulière ne cherchait qu'une seule occurrence de caractères.
    François DORIN
    Consultant informatique : conception, modélisation, développement (C#/.Net et SQL Server)
    Site internet | Profils Viadéo & LinkedIn
    ---------
    Page de cours : fdorin.developpez.com
    ---------
    N'oubliez pas de consulter la FAQ C# ainsi que les cours et tutoriels

  3. #3
    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
    Citation Envoyé par eric.bryan Voir le message
    Je recherche une regex qui matche des chaines de type :

    "aaa.bcd.efgh.ChaineFinale"
    C'est un peu vague comme description. Est-ce que tu cherches à vérifier que la totalité de la chaîne correspond à ce format (autrement dit une validation) ou bien est-ce que tu veux savoir si ta chaîne contient quelque part une sous-chaîne qui correspond à ce format?

    Je pencherai plutôt pour la première solution mais peut-être que je me trompe.

    Cherches-tu à extraire une partie particulière de la pattern (je demande ça à cause du groupe de capture dans ta pattern et aussi parce que tu as choisi la méthode Regex.Match plutôt que Regex.isMatch)?

    À propos de la partie "aaa.bcd.efgh.": Peut-elle être vide (dans le cas contraire le quantificateur * ne convient pas)? Est-ce qu'il est possible d'avoir deux points consécutifs?

    Que ta regex ne fonctionne pas de la manière dont tu souhaites, possible, par contre match.Success renvoie bien true dans l'exemple que tu as posté.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  4. #4
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2013
    Messages : 18
    Points : 15
    Points
    15
    Par défaut
    Citation Envoyé par CosmoKnacki Voir le message
    C'est un peu vague comme description. Est-ce que tu cherches à vérifier que la totalité de la chaîne correspond à ce format (autrement dit une validation) ou bien est-ce que tu veux savoir si ta chaîne contient quelque part une sous-chaîne qui correspond à ce format?

    Je pencherai plutôt pour la première solution mais peut-être que je me trompe.

    Cherches-tu à extraire une partie particulière de la pattern (je demande ça à cause du groupe de capture dans ta pattern et aussi parce que tu as choisi la méthode Regex.Match plutôt que Regex.isMatch)?

    À propos de la partie "aaa.bcd.efgh.": Peut-elle être vide (dans le cas contraire le quantificateur * ne convient pas)? Est-ce qu'il est possible d'avoir deux points consécutifs?

    Que ta regex ne fonctionne pas de la manière dont tu souhaites, possible, par contre match.Success renvoie bien true dans l'exemple que tu as posté.
    CosmoKnacki : merci pour ta réponse.
    En fait ce problème que je soumets ici n'est qu'une sous-partie d'in problème plus grand.
    Donc l'exemple de code que j'ai donné est juste pour tester cette sous-partie.
    En effet la partie "aaa.bcd.efgh." peut être vide.
    Je suis désolé que [codeinlinematch.Success[/codeinline] renvoie true dans cet exemple, j'ai du m'emmêler les pinceaux.
    Pour faire court le regex de dorinf résout ma problématique.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Inscrit en
    Août 2013
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Août 2013
    Messages : 18
    Points : 15
    Points
    15
    Par défaut
    Merci beaucoup dorinf pour ta réponse.

    Ca répond parfaitement à mes besoins.

    Eric.

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

Discussions similaires

  1. Regex pour matcher les log REJECT iptables
    Par Arnaudp33x33 dans le forum Sécurité
    Réponses: 2
    Dernier message: 11/04/2016, 10h45
  2. QGIS : lenteur pour afficher les listes des vues dans "Ajouter une table PostGIS"
    Par fafa63 dans le forum SIG : Système d'information Géographique
    Réponses: 2
    Dernier message: 11/07/2014, 19h04
  3. [Notepad++] utiliser regex pour remplacer des caractères
    Par ilood dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 04/02/2007, 04h06
  4. [Regex perl] Matcher un gros fichier
    Par osoumayaj dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 18/01/2007, 09h37
  5. [RegEx] Regex pour les accents et autres
    Par yule dans le forum Langage
    Réponses: 4
    Dernier message: 21/08/2006, 15h47

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