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 :

[Expression régulière] mauvaise interprétation


Sujet :

C#

  1. #1
    Membre régulier
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Points : 106
    Points
    106
    Par défaut [Expression régulière] mauvaise interprétation
    Bonjour,

    J'ai un petit souci avec les expressions régulières. J'ai fait un test de mon expression avec un certain logiciel nommé "expresso", et le résultat est celui auquel je m'attends. Seulement, quand je fais le test dans mon code, je n'obtiens pas du tout le bon résultat ! :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    string test = "2011/06/01 18:38 1.4414 1.4416\0";
    Regex expression = new Regex("\\b\\d+\\.\\d+\\b");
    string[] tutu = expression.Split(test);
    En gros, je veux pouvoir extraire les deux nombres 1.4414 et 1.4416 seulement mon tableau tutu contient "2011/06/01 18:38", "" et "\0"......

    Quelqu'un pourrait-il m'aider ? Merci !!!!!

  2. #2
    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
    Et comme ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    static void Main(string[] args)
    {
    	string test = "2011/06/01 18:38 1.4414 1.4416\0";
    	Regex expression = new Regex(@"(?<number1>\b\d+\.\d+\b)\s(?<number2>\b\d+\.\d+\b)");
    	Match match = expression.Match(test);
    	if (match.Success)
    	{
    		Console.WriteLine(match.Groups["number1"]);
    		Console.WriteLine(match.Groups["number2"]);
    	}
    	Console.ReadKey();
    }
    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.

  3. #3
    Membre régulier
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    Excellent ! Merci beaucoup, ça fonctionne au poil.

    Comme c'était la première fois que j'utilisais les expressions régulières, est-ce que tu pourrais me dire où était le bobo dans mon approche ? Pourquoi est-ce que avec la méthode Split ça ne fonctionne pas ?

  4. #4
    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
    Je ne pourrais pas te répondre pour le split, je ne sais pas comment elle fonctionne, car je ne l'ai jamais utilisé.

    J'ai simplement modifié ton code pour qu'il fonctionne de la manière que je fais habituellement. Une légère adaptation du regex et ça la fonctionné.

    J'aime bien utiliser les groupes dans une expression, ça permet de rapidement sélectionner la partie voulue sans jouer avec les index numériques.
    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.

  5. #5
    Membre régulier
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    ok, je pense que je viens de comprendre. C'est la méthode Split qui est le problème, pas la syntaxe de mon expression régulière ? Split coupe la chaine de caractère dès qu'il matche avec l'expression régulière, c'est pour cela que j'ai les trois membres retournés c'est bien ça ?

  6. #6
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Pourquoi utiliser une expression régulière pour ça ? Un simple split sur les espaces suffirait, ensuite tu prends les deux derniers éléments du tableau ainsi obtenu.

    Citation Envoyé par androz
    Split coupe la chaine de caractère dès qu'il matche avec l'expression régulière, c'est pour cela que j'ai les trois membres retournés c'est bien ça ?
    Regex.Split coupe aux positions correspondantes à l'expression, il suffit de lire la doc
    Pas de questions techniques par MP

  7. #7
    Membre régulier
    Profil pro
    Concepteur traitement de signal
    Inscrit en
    Août 2004
    Messages
    192
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Concepteur traitement de signal
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Août 2004
    Messages : 192
    Points : 106
    Points
    106
    Par défaut
    Oui en effet, il suffit de lire la doc, et j'avoue être passé un peu rapidement là-dessus.... honte à moi

    Maintenant pourquoi utiliser une expression régulière ? Je dirais pourquoi pas ? D'une, ça m'apprend un peu comment ça fonctionne, de deux je lis un flux de données susceptibles de changer de format dans le temps donc la position des nombres que je veux récupérer n'est pas forcément fixe. Si je découpe sur les espaces (ce qui est une excellent idée) et que j'ai un mot de plus qui s'ajoute dans ma chaine de caractères, je suis fait.

    Merci à vous deux !

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

Discussions similaires

  1. JS et expression régulière mal interprétée
    Par frochard dans le forum Général JavaScript
    Réponses: 10
    Dernier message: 16/05/2009, 03h46
  2. Expression réguliére
    Par Mad_Max dans le forum Langages de programmation
    Réponses: 2
    Dernier message: 16/09/2003, 18h17
  3. [expression régulière] mon cerveau fait des noeuds..
    Par nawac dans le forum Algorithmes et structures de données
    Réponses: 7
    Dernier message: 27/05/2003, 10h06
  4. Expressions réguliéres
    Par Tooms dans le forum Langage
    Réponses: 4
    Dernier message: 06/12/2002, 18h42
  5. Réponses: 5
    Dernier message: 11/06/2002, 15h21

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