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

Collection et Stream Java Discussion :

Extraction chaine de caractère (RegExp)


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 347
    Par défaut Extraction chaine de caractère (RegExp)
    Bonjour,

    J'ai une chaine de caractère :
    bonjour robert <a href="http://www.test.net/f/">test</a> bla bl bla<a href="http://www.google.com">google</a> <b>google</b> << google
    Comment faire pour extraire toutes les chaine commençant par :
    <a et terminant par </a> pour les mettre dans un tableau ?


    J'ai essayer l'expression régulière ci dessous:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     String[] tabText = text.split("[<A*</A]");
    Mais sans succès

    Merci d'avance

  2. #2
    Membre Expert
    Avatar de visiwi
    Profil pro
    Inscrit en
    Février 2008
    Messages
    1 050
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 1 050
    Par défaut
    Salut,

    A titre de proposition, car je suis pas un pro des expressions rationnelles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    String motif = "<a[\\s]+href=[^>]*>[^<]*</a>";
    Pattern pattern = Pattern.compile(motif);
    Matcher macher = pattern.matcher("bonjour robert <a href=\"http://www.test.net/f/\">test</a> bla bl bla<a href=\"http://www.google.com\">google</a> <b>google</b> << google");
    while (macher.find()) {
    	System.out.println("URL trouvé (" + macher.start() + ", " + macher.end() + ") --> " + macher.group());
    }

  3. #3
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Il y a bien l'opérateur non-gourmand à utiliser pour te faciliter la tâche (.*? ou .+? ou .??). Il agit comme .* (ou .+ ou .?), mais en prenant la plus petite chaîne qui remplit ce contrat. :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    String s = "bonjour robert <a href=\"http://www.test.net/f/\">test</a> bla bl bla<a href=\"http://www.google.com\">google</a> <b>google</b> << google";
     
    Pattern p = Pattern.compile("<a.*?>.*?</a>", Pattern.CASE_INSENSITIVE);
    Matcher m = p.matcher(s);
    while (m.find()) {
    	System.out.println(m.group());
    }
    Donne :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <a href="http://www.test.net/f/">test</a>
    <a href="http://www.google.com">google</a>

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 347
    Par défaut
    Magnifique !
    Merci beaucoup, c'est exactement ce que je cherchais.
    Je ne connaissais pas la classe Pattern qui est très approprié.
    Je pense gagner beaucoup en performance et en simplicité grâce à votre aide. Un grand merci encore, je n'aurais espère mieux !

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    347
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 347
    Par défaut
    Bonjour,

    Etant très satisfait de ce code, j'ai décider d'approfondir les expressions régulières. J'ai donc une question supplémentaire, je n'ai pas ouvrir le de nouveau post car que le prolonguement du post respecte la netiquette.

    J'ai voulu extraire le lien de la balise <A, voici ma proposition:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
            Pattern p = Pattern.compile("href..*?.[\"' ]", Pattern.CASE_INSENSITIVE);
            Matcher m = p.matcher(lien);
            String word;
            while (m.find()) {
                   System.out.println(m.group());
            };
    Le probleme c'est que si le lien est entre guillemet, je l'ai récupere. y a t-il un moyen de les exclures ?

    Egalement, j'aimerais extraire le mot clef du lien.
    Je propose ">.*</" comme expression régulière, mais là aussi jai le meme probleme. je récupere ">Google</".. je n'arrive pas à exclure les caracteres me permettant d'identifier le mot.

    Merci d'avance

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    625
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2005
    Messages : 625
    Par défaut
    Pfouuu elle est pas simple à piger la gestion des regex avec java

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Pattern p = Pattern.compile( "<a href=\"(.*?)\">(.*?)</a>" );
    Matcher m = p.matcher( lien );
    les parenthèses permettent de délimiter des blocs (group) de capture.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while( m.find() ){
        System.out.println( m.group( 0 ) ); //retourne tout ce que le masque a capturé
        System.out.println( m.group( 1 ) ); //retourne ce qui a été capturé dans la première parenthèse
        System.out.println( m.group( 2 ) ); //retourne ce qui a été capturé dans la seconde parenthèse
    }

Discussions similaires

  1. Extraction chaine de caractères entre deux |
    Par urbanspike dans le forum Débuter
    Réponses: 3
    Dernier message: 04/10/2012, 16h46
  2. [XL-2007] PB : Extraction chaine de caractères
    Par chaser_T dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/12/2011, 16h43
  3. Extraction chaine de caractères
    Par omelhor dans le forum Langage
    Réponses: 10
    Dernier message: 22/06/2010, 14h00
  4. Réponses: 4
    Dernier message: 10/09/2008, 13h53
  5. extractions chaine de caractères
    Par blackstrobe dans le forum Linux
    Réponses: 2
    Dernier message: 10/09/2007, 21h21

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