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

avec Java Discussion :

Expression régulière : Découpage d'une chaine


Sujet :

avec Java

  1. #1
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Points : 57
    Points
    57
    Par défaut Expression régulière : Découpage d'une chaine
    Bonsoir,

    Je cherche à découper, à l'aide d'une expression régulière, la chaine suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    {FR}=Angleterre{EN}=England
    Voici mon premier bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
            String chaine = "{FR}=Angleterre{EN}=England";
            String regex = "(\\{[A-Z]+\\}=)";
            String s[] = chaine.split(regex);
            for (String elt : s) {
                System.out.println("--- ---"+elt);
            }
    Mais ce code, bien qu'il marche ne me récupère que les noms de pays (ie. Angleterre, England).

    Mon objectif est de récupérer un tableau dans les élements sont constitués ainsi :
    s[0]=FR
    s[1]=Angleterre
    s[2]=EN
    s[3]=England

    Merci d'avance pour toute aide.

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    C'est tout à fait normal puisque les bloc entre accolades sont utilisé comme séparateur.

    Perso je pense que tu prends le problème à l'envers : tu tentes de découper la chaine, alors que tu devrais plutôt rechercher les éléments de ton choix.

    Ce serait plus simple de rechercher tous les {XX}=yyyy

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    		String chaine = "{FR}=Angleterre{EN}=England";
     
    		Pattern pattern = Pattern.compile(
    				"\\{" +			// accolade ouvrante
    				"([A-Z]+)" +	// Code en lettre majuscule
    				"\\}= " +		// accolade fermante et symbole equal
    				"([^{}]+)");	// Le texte (tout sauf une accolade)
    		Matcher matcher = pattern.matcher(chaine);
    		while (matcher.find()) {
    			String code = matcher.group(1);
    			String value = matcher.group(2);
    			System.out.println("---" + code + "---" + value);
    		}
    Et avec les group() tu récupères les portions que tu veux (définies entre parenthèse dans la regexp).


    a++

  3. #3
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Salut,


    C'est tout à fait normal puisque les bloc entre accolades sont utilisé comme séparateur.

    Perso je pense que tu prends le problème à l'envers : tu tentes de découper la chaine, alors que tu devrais plutôt rechercher les éléments de ton choix.

    Ce serait plus simple de rechercher tous les {XX}=yyyy

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    		String chaine = "{FR}=Angleterre{EN}=England";
     
    		Pattern pattern = Pattern.compile(
    				"\\{" +			// accolade ouvrante
    				"([A-Z]+)" +	// Code en lettre majuscule
    				"\\}= " +		// accolade fermante et symbole equal
    				"([^{}]+)");	// Le texte (tout sauf une accolade)
    		Matcher matcher = pattern.matcher(chaine);
    		while (matcher.find()) {
    			String code = matcher.group(1);
    			String value = matcher.group(2);
    			System.out.println("---" + code + "---" + value);
    		}
    Et avec les group() tu récupères les portions que tu veux (définies entre parenthèse dans la regexp).


    a++
    Bonjour,

    Tout d'abord, merci pour ta réponse. En effet, chercher les {XX}=yyyy est une meilleure approche mais j'étais coincé en écrivant l'expreg donc j'ai cherché à contourner.

    Sinon, j'ai excécuté ton code mais rien ne s'affiche. As-tu pu faire fonctionner ton code de ton côté ? Ou peut être que tu as omis un truc dans ton expreg ?

    En attendant, je vais voir de mon côté ce qui cloche !

    Merci.

  4. #4
    Membre du Club
    Inscrit en
    Juin 2008
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 125
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par hisoft Voir le message
    Bonjour,

    Tout d'abord, merci pour ta réponse. En effet, chercher les {XX}=yyyy est une meilleure approche mais j'étais coincé en écrivant l'expreg donc j'ai cherché à contourner.

    Sinon, j'ai excécuté ton code mais rien ne s'affiche. As-tu pu faire fonctionner ton code de ton côté ? Ou peut être que tu as omis un truc dans ton expreg ?

    En attendant, je vais voir de mon côté ce qui cloche !

    Merci.
    J'ai trouvé le problème : un petit espace qui s'est glissé dans ton expreg (juste après =) !

    Et donc voici le code corrigé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
            Pattern pattern = Pattern.compile(
                    "\\{" +            // accolade ouvrante
                    "([A-Z]+)" +    // Code en lettre majuscule
                    "\\}=" +        // accolade fermante et symbole equal
                    "([^{}]+)");    // Le texte (tout sauf une accolade ouvrante ou fermante)
            Matcher matcher = pattern.matcher(chaine);
            while (matcher.find()) {
                String code = matcher.group(1);
                String value = matcher.group(2);
                System.out.println("---" + code + "---" + value);
            }
    Merci encore une fois pour ton aide.
    A+

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

Discussions similaires

  1. Découpage d'une chaine via expressions régulières
    Par 65days dans le forum Général Java
    Réponses: 3
    Dernier message: 07/12/2009, 21h02
  2. Réponses: 11
    Dernier message: 24/03/2006, 11h12
  3. Réponses: 2
    Dernier message: 03/11/2005, 15h03
  4. Découpage d'une chaine
    Par krfa1 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 21/10/2005, 12h33
  5. découpage d'une chaine de caractère
    Par lamojuli dans le forum ASP
    Réponses: 4
    Dernier message: 13/05/2004, 15h00

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