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 :

class Regex (un test)


Sujet :

C#

  1. #1
    Rukia
    Invité(e)
    Par défaut class Regex (un test)
    Salut

    j'ai met deux condition dans ma boucle !(separateur.IsMatch(x)) et non fin de la chaine entite1
    mais le premier test ne s'effectue pas ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    private void button1_Click(object sender, EventArgs e)
            {
     
                String chaine = richTextBox1.Text;
                String entite=" ";
                String entite1;
                String modele1 =@"a\b";
                Regex separateur = new Regex(modele1);
     
                char[] array = new char[] { ' ' };
     
                String x = " ";
     
                //:::::::::: on doit saute les blanc :::::://
     
                String[] morceaux = chaine.Split(array[0]);
                int i = 0; int j = 1;
                while (i < morceaux.Length)
                {
                    entite1 = morceaux[i];
                      char c = entite1[0];
                        x = c.ToString();
                         while ((!(separateur.IsMatch(x))) &&(j<entite1.Length ))
                         {
                             entite = String.Concat(entite, x);
                               c =entite1[j];
                              x = c.ToString();
                              j++;
                         }
     
                         richTextBox2.Text = entite1;
     
     
                    i++;
     
     
                }
            }

  2. #2
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 254
    Points
    28 254
    Par défaut
    il se fait pas ou il retourne pas ce que tu veux?

    là ton code, il fait ceci

    Si la chaine(enfin un morceau de la chaine) n'est pas égale à "a\b" et est supérieur à 1 caractère alors...

    c'est bien ca que tu veux faire?
    parce que bon, X vient de C, c est un char donc c fait un seul caractère donc C n'a aucune chance de pouvoir être égal à "a\b" donc le test est toujours faux et comme t'as mis un ! alors il est toujorus vrai. donc il s'effectue



    je te parles même pas de cette partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    entite = String.Concat(entite, x);
                               c =entite1[j];
                              x = c.ToString();
                              j++;
    qui sert à rien du tout là tu remplis identite (bizarrement instancié à " ") et puis tu ne l'utilises plus. ensuite, tu remplis C et tu remplis x que tu n'utilises pas non plus.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (!(separateur.IsMatch(x)))
    ca alourdi le code pour rien
    ca marche tout aussi bien

  3. #3
    Rukia
    Invité(e)
    Par défaut
    Citation Envoyé par Louis-Guillaume Morand Voir le message
    il se fait pas ou il retourne pas ce que tu veux?
    il retourne pas ce que je veux


    Citation Envoyé par Louis-Guillaume Morand Voir le message
    Si la chaine(enfin un morceau de la chaine) n'est pas égale à "a\b" et est supérieur à 1 caractère alors...
    c'est bien ca que tu veux faire?
    si un caractère de la chaine n'est pas un 'a ou b' il avance dans la chaine sinon il sort tanque ce ne pas la fin de la chaine

    Citation Envoyé par Louis-Guillaume Morand Voir le message
    parce que bon, X vient de C, c est un char donc c fait un seul caractère donc C n'a aucune chance de pouvoir être égal à "a\b" donc le test est toujours faux et comme t'as mis un ! alors il est toujorus vrai. donc il s'effectue
    la j'ai pas compris ou es mon erreur


    Citation Envoyé par Louis-Guillaume Morand Voir le message
    je te parles même pas de cette partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    entite = String.Concat(entite, x);
                               c =entite1[j];
                              x = c.ToString();
                              j++;
    qui sert à rien du tout là tu remplis identite (bizarrement instancié à " ") et puis tu ne l'utilises plus. ensuite, tu remplis C et tu remplis x que tu n'utilises pas non plus.
    pour "entite" je vais travaille avec apres
    pour
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    c =entite1[j];
                              x = c.ToString();
    d'apres mes connaissance limité la methode IsMatch accepte un string en entre donc chui obliger de convertir mon char "c" a un string "x"

  4. #4
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 254
    Points
    28 254
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String modele1 =@"a\b";
    =>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String modele1 =@"a|b";
    c'est pas du tout pareil hein

    là tu testais si x était égal à "a\b", cad les trois caractères, slash compris

  5. #5
    Rukia
    Invité(e)
    Par défaut
    Mici Beaucoup LGM
    mon erreur vient de mon Auteur
    pouvez vous me conseil par un tuto sur la class regex ?

  6. #6
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 254
    Points
    28 254
    Par défaut
    t'as qu'a regarder mon tuto à moi
    http://lgmorand.developpez.com/dotnet/regex/

  7. #7
    Rukia
    Invité(e)
    Par défaut
    mici LGM
    mais pourquoi avec qlq caractere il me généré une exception
    par exemple
    String modele1 =@"*|+|)|(";
    l'exception a ce niveau

  8. #8
    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
    * et + sont des quantifieurs et donc des caractères spéciaux des expressions régulières (un peu comme le \n pour le retour à la ligne dans les chaînes de caractères).

    Vu l'utilisation que tu en fais c'est normal qu'il y ai un problème : le * et le + ne quantifient rien puisque rien ne précède le * et que le + succède à un autre caractère spécial.

    Si tu veux indiquer les caractères * et + il faut mettre un \ devant (caractère d'échappement pour les expressions régulières).

    Au passage, il y a des petits softs sympas pour tester les expressions régulières et prendre la main avec (Expresso, RAD Designer, ...).

  9. #9
    Rukia
    Invité(e)
    Par défaut
    Citation Envoyé par StormimOn Voir le message

    Si tu veux indiquer les caractères * et + il faut mettre un \ devant (caractère d'échappement pour les expressions régulières).

    ...).
    merci bcp bcp
    mais avec le caractere ( " ) marche pas

  10. #10
    Membre expert
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    2 210
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 210
    Points : 3 015
    Points
    3 015
    Par défaut
    Pourtant le caractère d'échappement fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
          Regex reg = new Regex( "\"" );
          string toto = "<tr><td colspan=\"4\"></td></tr>";
          string titi = "pas de guillemet";
          bool b = reg.IsMatch( toto );//true
          bool c = reg.IsMatch( titi );//false

  11. #11
    Expert confirmé
    Avatar de ced600
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2006
    Messages
    3 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Août 2006
    Messages : 3 364
    Points : 4 061
    Points
    4 061
    Par défaut
    Cela devrait donner ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String modele1 ="\*|\+|)|\"(";
    Tu ne peux pas utiliser @ lorsque tu utilise \ pour faire de l'échapement parce que @ désactive la fonction d'échapement \

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/11/2009, 00h28
  2. Regex perl (test \n)
    Par slockstone dans le forum Langage
    Réponses: 10
    Dernier message: 18/01/2009, 16h21
  3. Réponses: 1
    Dernier message: 11/12/2007, 17h45
  4. Classe regex booleen
    Par harakatyouness dans le forum C#
    Réponses: 2
    Dernier message: 05/08/2007, 19h18
  5. autre classe regex
    Par sroux dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 31/05/2006, 09h34

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