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

Dotnet Discussion :

Expression réguliere c#


Sujet :

Dotnet

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2009
    Messages
    48
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2009
    Messages : 48
    Par défaut Expression réguliere c#
    Bonjour,


    J'essaye de faire une expression régulière permettant d'extraire les chaines de ce type : >.......<......<
    Où les points correspondent à n'importe quel caractère sauf les < et >

    J'ai essayé +ieurs combinaison mais je n'arrive pas à trouver la bonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
                string chaine = "<aaaaaaa1>bbbbbb2<ccccc3><dddddd4";
     
                string pattern = @">(.[^<])*<(.^(<|>))*<";
                Regex rgx = new Regex(pattern, RegexOptions.Multiline);
                Match match = rgx.Match(chaine);
     
                if (match.Success)
                {
                    Console.WriteLine(match.Groups[0].Value);
                }
    J'explique : chaine qui commence par > suivi de n'importe quel caractère jusqu'à trouver <, ce dernier est suivi de n'importe quel caractère sauf < et > jusqu'à trouver <.


    Merci d'avance.

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    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 986
    Par défaut
    Bonjour,

    Je pense que ta formulation est mauvaise d'entrée de jeu, car:

    chaine qui commence par > suivi de n'importe quel caractère jusqu'à trouver <, ce dernier est suivi de n'importe quel caractère sauf < et > jusqu'à trouver <.
    correspond stricto sensu à:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string pattern = @">.<[^<>]<";
    ou à la limite:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string pattern = @">[^<]+<[^<>]+<";
    ce qui échoue avec la chaîne que tu proposes.


    Maintenant l'exemple que tu donnes au début est un peu plus parlant:
    >.......<......<
    J'en déduis que tu cherches à matcher >bbbbbb2<ccccc3>< (dis moi si je me trompe) ce qui se fait avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string pattern=@">(?:[^<]+<){2}";
    Ce qui correspondrai à cette formulation:

    "Chaîne commençant par >,
    suivi de un ou plusieurs caractères différents de <, suivi de <,
    suivi de un ou plusieurs caractères différents de <, suivi de <."

    Voilà, j'ai supposé qu'il devait y avoir au moins un caractère entre chaque signe < ou >, mais si ce n'est pas le cas, il suffit de remplacer + par *.

    Je te conseille de suivre un tutoriel quelconque sur les regex car visiblement tu n'es pas très à l'aise avec leur syntaxe, notamment pour ce qui est des classes de caractères.

    . => n'importe quel caractère
    [^<] => n'importe quel caractère sauf le <
    .[^<] => n'importe quel caractère, suivi de n'importe quel caractère sauf le <
    .^(<|>) => ne veut rien dire car le caractère ^ en dehors d'une classe de caractères s'il n'est pas échappé signifie "début de la chaîne" or il se trouve en plein milieu de la pattern.

    Les expressions dites régulières sont bien moins compliquées qu'elles ne paraissent si on prend le temps de bien formuler ce que l'on cherche, et si on traduit cette formulation avec rigueur (sans essayer des trucs au hasard, sans "à peu près").

    Bon courage.

Discussions similaires

  1. [Debutant] Expression réguliere
    Par grizzz dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 17/08/2007, 16h14
  2. expression réguliere
    Par htristra dans le forum C
    Réponses: 11
    Dernier message: 06/09/2005, 22h33
  3. expression réguliere en c++
    Par alambics dans le forum MFC
    Réponses: 9
    Dernier message: 10/03/2004, 20h19
  4. expression réguliere
    Par alambics dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/03/2004, 13h52

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