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

C# Discussion :

Regex - divergences des resultats


Sujet :

C#

  1. #1
    Membre confirmé Avatar de WaterTwelve21
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2015
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2015
    Messages : 270
    Points : 461
    Points
    461
    Par défaut Regex - divergences des resultats
    Bonjour ,

    Je voulais savoir si il y avait des particularités sur le traitement des regex en .NET

    J'ai un pattern qui vérifie si la chaîne correspond au format suivant : des caractères numérique + éventuellement un F + des caractères numériques le tout d'une longueur entre 6 et 30 caractères.

    Ce code renvoie True :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     string str = "5436513685473651368435413845136854361541111";
                string pattern = @"^(?=.{6,30})\d+F?\d+$";
                Regex rgx = new Regex(pattern,RegexOptions.IgnoreCase);
     
                Console.WriteLine(rgx.IsMatch(str));
    Alors qu'en passant par un interpréteur de Regex : https://regex101.com/r/zR4rI1/1

    J'ai besoin qu'on m'éclaire s'il vous plait
    throw new NoSignatureException();

  2. #2
    Membre confirmé Avatar de WaterTwelve21
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2015
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2015
    Messages : 270
    Points : 461
    Points
    461
    Par défaut
    Le problème ici , c'est que ma regex ne semble pas prendre en compte le nombre maximum de caractère (30) la borne minimal elle , est respectée .
    throw new NoSignatureException();

  3. #3
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    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 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Bonjour,

    La réponse est simple : la chaîne que tu testes sur regex101 est invalide. Il y a des sauts de ligne en trop. Si tu retires les sauts de ligne, ton expression vérifie bien le pattern.

    Au passage, je trouve ton expression très compliquée. Pourquoi utiliser un "positive lookahead" (désolé pour l'anglais, mais je ne vois pas comment traduire cela en français tout en restant compréhensible !) en début de chaîne ? Cela n'a pas beaucoup de sens. Quelque chose comme ^.{6,30}\d+F?\d+$ est plus simple à lire et est équivalent à ce que tu as écrit.

    [edit]
    Sur regex101, tu peux utiliser le modificateur "m" pour préciser que tu veux que les ^ et $ correspondent respectivement à un début de ligne et une fin de ligne. Sans cela, ils correspondent au début et à la fin du texte.
    [/edit]
    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

  4. #4
    Membre confirmé Avatar de WaterTwelve21
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2015
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2015
    Messages : 270
    Points : 461
    Points
    461
    Par défaut
    Merci Dorinf pour les précieuses informations !

    J'ai résolu ensuite pour ceux que ça intéresse le problème de limitation à 30 caractères max en ajoutant le symbole '$' qui signifie la fin de chaîne .

    Comme ceci : Sujet Résolu.
    throw new NoSignatureException();

  5. #5
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    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 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Citation Envoyé par WaterTwelve21 Voir le message
    J'ai résolu ensuite pour ceux que ça intéresse le problème de limitation à 30 caractères max en ajoutant le symbole '$' qui signifie la fin de chaîne .

    Comme ceci :
    Attention : tu changes complètement ton pattern ! Il n'a plus rien à voir avec celui que tu nous as fourni initialement !

    Pour éviter les erreurs, il serait peut être plus sage que tu nous dises exactement (avec des mots, et pas avec une expression régulière), ce que tu souhaites vérifier comme pattern.
    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

  6. #6
    Membre confirmé Avatar de WaterTwelve21
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Décembre 2015
    Messages
    270
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Décembre 2015
    Messages : 270
    Points : 461
    Points
    461
    Par défaut
    Je ne voit pas en quoi je change complètement mon pattern , de celui ci ; Je passe à celui ci le '$' rajouté permet de prendre en compte la limite maximum de longueur de la chaîne , soit 30 caractères .

    Au sujet de la signification de mon pattern , je l'explique à l'énoncé de ma question : des caractères numériques (\d) + éventuellement un F ( +F?) + des caractères numériques . Le tout d'une longueur entre 6 et 30 caractères ((?=.{6,30}$)).

    Il s'agit simplement d'une analyse de la syntaxe d'une référence commande.

    Donc pour illustrer ce qui doit / ne doit pas passer :

    Match :
    1. 1235F3256
    2. 3213451545


    No Match :
    1. 1245
    2. 16546517465173461515476412316546413215467465136461456315487
    3. 13254H1132
    throw new NoSignatureException();

  7. #7
    Expert éminent sénior

    Avatar de François DORIN
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juillet 2016
    Messages
    2 757
    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 757
    Points : 10 697
    Points
    10 697
    Billets dans le blog
    21
    Par défaut
    Mea culpa, c'est moi qui avait mal compris ce que tu souhaitais faire. Désolé
    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

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2008
    Messages
    381
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2008
    Messages : 381
    Points : 766
    Points
    766
    Par défaut
    Note à part, comme testeur en ligne je prend RegexStorm.net
    C'est basé sur .Net, donc pas de souci de comportement.
    Les fautes d'orthographes sus-citées sont déposées auprès de leurs propriétaires respectifs. Aucune responsabilité n'est engagée sur la lisibilité du message ou les éventuels dommages qu'il peut engendrer.

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

Discussions similaires

  1. Récupérer des resultats Google pour mon appli ?
    Par Bruno13 dans le forum API, COM et SDKs
    Réponses: 5
    Dernier message: 06/03/2006, 18h57
  2. Réponses: 4
    Dernier message: 23/01/2006, 18h49
  3. division des resultats de deux requetes
    Par decour dans le forum Access
    Réponses: 1
    Dernier message: 14/10/2005, 10h42
  4. [VB.Net] Traitement des résultats d'une requète
    Par Catalan dans le forum ASP.NET
    Réponses: 23
    Dernier message: 05/10/2005, 17h29
  5. Réponses: 2
    Dernier message: 29/11/2004, 12h13

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