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 :

Regex : entraire chaines entre 2 autres chaines


Sujet :

Dotnet

  1. #1
    Membre habitué Avatar de avogadro
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 412
    Points : 188
    Points
    188
    Par défaut Regex : entraire chaines entre 2 autres chaines
    Bonjour,

    étant bof bof en regex et malgrès les sites fait pour ca, je trouve pas mon bonheur. Actuellement jai le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Regex monRegex = new Regex("(^http://\S+.free.fr$)");
                string[] amis = monRegex.Split(richTextBox2.Text);            
                for (int i = 0; i < amis.Length; i++)
                    richTextBox4.Text += amis[i] + "\r\n";
    richTextBox2 étant une longue string, elle contient ceux que je cherche de cette facon par exemple :
    blopblophttp://toto.free.frblipblupblophttp://mamie.free.frdeveloppez.com
    Mon but est ici de retrouver dans amis[0] = toto et amis[1] = mamie
    Mais déjà mon regex parait éroné donc ca ne marche pas :s
    Pouvez-vous m'aider?

  2. #2
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Essaye sans le ^ de début de chaîne et le $ de fin de chaîne.
    Tu peux aussi lire l'excellent article de Louis-Guillaume MORAND sur les RegEx :
    http://lgmorand.developpez.com/dotnet/regex/

  3. #3
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Essaie avec ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "http://(?<host>\S*?)\.free\.fr"
    Tu avais oublié de protéger les . qui sont des caractères spéciaux pour les regex. J'ai utilisé un groupe nommé pour capturer des chaines.

  4. #4
    Membre habitué Avatar de avogadro
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 412
    Points : 188
    Points
    188
    Par défaut
    c'est pas dit comment récupérer juste le groupe nommé sur le site sur les regex lol

    j'ai pris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Regex monRegex = new Regex("http://(?<host>\\S*?)\\.free\\.fr");
    ca marche mais il me donne aussi ce qu'il y a avant http:// et apres free.fr :s

  5. #5
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    Citation Envoyé par avogadro Voir le message
    c'est pas dit comment récupérer juste le groupe nommé sur le site sur les regex lol
    Effectivement. J'avais passé du temps à retrouver ça sur la msdn...

    Citation Envoyé par avogadro Voir le message
    j'ai pris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Regex monRegex = new Regex("http://(?<host>\\S*?)\\.free\\.fr");
    ca marche mais il me donne aussi ce qu'il y a avant http:// et apres free.fr :s
    Avec les groupes nommés, tu n'as plus besoin de faire un split de ta chaine.

  6. #6
    Membre habitué Avatar de avogadro
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 412
    Points : 188
    Points
    188
    Par défaut
    Citation Envoyé par Skalp Voir le message
    Effectivement. J'avais passé du temps à retrouver ça sur la msdn...

    Avec les groupes nommés, tu n'as plus besoin de faire un split de ta chaine.

    exact, j'ai changé pr avoir ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            String Extension(String url)
            {
                Regex r = new Regex(@"http://(?<proto>\w+)[^.free.fr]",
                    RegexOptions.Compiled);
                return r.Match(url).Result("${proto}");
            }
    et avec ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBox.Show(Extension("fsfsfhttp://contoso.free.fr/lol"));
    il me sort "con" lol (le destin? XD)
    :s

  7. #7
    Rédacteur
    Avatar de SaumonAgile
    Homme Profil pro
    Team leader
    Inscrit en
    Avril 2007
    Messages
    4 028
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Team leader
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2007
    Messages : 4 028
    Points : 6 334
    Points
    6 334
    Par défaut
    Qu'est ce que tu penses faire avec [^.free.fr] ?
    Tu es en train de lui dire de ne pas matcher n'importe quel caractère, c-a-d "tous les caractères sauf... tous les caractères...". Tu devrais peut-être reprendre les bases des expressions rationnelles, ça t'évitera de tourner en rond.
    En attendant, en voici une qui fonctionne mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "http://(?<proto>\w+?).free.fr"

  8. #8
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut
    De mon côté, il me sort "contos"... le destin, c'est sûr

    Plus sérieusement, ta chaîne RegEx est mauvaise : tu dois, comme SaumonAgile te l'a dit (le 11/09), mettre des \ devant les points :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Regex r = new Regex(@"http://(?<proto>\w+)\.free\.fr", RegexOptions.Compiled);
    Voilà la bonne chaîne RegEx.

    Ceci dit, avec ta méthode Extension(url), tu ne sors que le premier résultat, mais bon c'est peut-être juste pour tes tests.
    Je te mets quand même mon test, pour info :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    static String Extension(String url)
    {
        Regex r = new Regex(@"http://(?<proto>\w+)\.free\.fr",
            RegexOptions.Compiled);
    
        string result = "";
        foreach (Match match in r.Matches(url))
        {
            result += match.Result("${proto}");
        }
        return result; // r.Match(url).Result("${proto}");
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBox.Show(Extension("fsfsfhttp://contoso.free.fr/lolhttp://developpez.comtotohttp://lesite.free.frtata"));
    Me donne : contosolesite

  9. #9
    Membre habitué Avatar de avogadro
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    412
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 412
    Points : 188
    Points
    188
    Par défaut
    Effectivement, je dormais a moitié :s
    arf ces regex va falloir que ca rentre la, je vais faire des petits exo

    J'ai modifé les scripts, ca donne un jolie truc dinamique comme ca :

    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
     
            private void button4_Click(object sender, EventArgs e)
            {
                Extension("fsfsfhttp://contoso.free.fr/lolhttp://developpez.comtotohttp://lesite.free.frtata");
                foreach(string str in result){
                    richTextBox4.Text += str.ToString() + "\r\n";    
                }
     
            }
     
            ArrayList result = new ArrayList();
     
            ArrayList Extension(String url)
            {
                Regex r = new Regex(@"http://(?<proto>\w+)\.free\.fr",
                    RegexOptions.Compiled);
     
                foreach (Match match in r.Matches(url))
                {
                    result.Add(match.Result("${proto}"));                
                }            
                return result;
            }
    merci pour l'aide

  10. #10
    Rédacteur/Modérateur
    Avatar de Skalp
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2006
    Messages
    1 694
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 694
    Points : 2 927
    Points
    2 927
    Par défaut

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

Discussions similaires

  1. REGEXP : recupérer une chaine entre deux autres chaines
    Par dude666 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 31/08/2006, 09h23
  2. Recherche d'une chaine dans une autre chaine
    Par arnapou dans le forum C
    Réponses: 7
    Dernier message: 31/01/2006, 23h10
  3. [vbexcel]Rechercher une chaine dans une autre chaine...
    Par Mugette dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 12/12/2005, 13h49
  4. Réponses: 13
    Dernier message: 13/06/2003, 14h13
  5. Réponses: 6
    Dernier message: 24/03/2003, 17h11

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