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

Langage Java Discussion :

[REGEX]nombre de group variable


Sujet :

Langage Java

  1. #1
    Membre éclairé Avatar de spilliaert
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 268
    Par défaut [REGEX]nombre de group variable
    Bonjour,

    Je dois trouver toutes les occurences de ceci dans un fichier texte:
    Che ( 50.4 : 80.4 )
    Je dois en faire des graphiques cheminées...Pour cela, je les analyse avec cette regex
    C*c*he\s*\(\s*((\d+)\.*\d*\s*:*\s*)+\s*\)
    ce qui m'intéresse est en gras. Le problème, c'est que quand je vais voir tous les matcher.group(), je n'ai que le premier nombre...

    comment pourrais-je faire pour récuperer TOUS les nombres dont j'ai besoin(en gras dans la regex) ?

    D'avance, merci de votre aide...

    Cordialement,
    Spilliaert

  2. #2
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Pattern p=Pattern.compile("Che\\((\\d+)\\.(\\d+):(\\d+)\\.(\\d+)\\)");
    Matcher m=p.matcher("Che(50.4:80.4)");
    		if(m.matches()){
    			int n=m.groupCount();
                            String s=null;
    			for(int i=1;i<=n;i++){
    			s=m.group(i);
    			System.out.println(s);
    			}
    		}

  3. #3
    Membre éclairé Avatar de spilliaert
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 268
    Par défaut
    Merci de votre réponse...

    Je me suis mal exprimé.

    Votre exemple ne fonctionne que si Che() ne comprend que 2 nombres...

    Je me demande si je vais pas faire avecA+

  4. #4
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Pattern p=Pattern.compile("\\d+.\\d+");
    Matcher m=p.matcher("Che(50.4:80.4:12.34:56.78)");
    String s=null;
    while(m.find()){
    		s=m.group();
    		System.out.println(s);
    		}
    ?

  5. #5
    Membre éclairé Avatar de spilliaert
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 268
    Par défaut
    Merci, mais, il me faudrait aussi le "Che" et les "(" ")"...

    Merci pour votre aide

  6. #6
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    /*vérification de la chaine*/
    Pattern p1=Pattern.compile("Che\\(((\\d+.\\d+:)*(\\d+.\\d+)*)\\)");
    Matcher m1=p1.matcher("Che(50.4:80.4:10.36:25.56:)");
    if(m1.matches()){//si c'est bon on extrait les morceaux
    		String s=m1.group(1);
    		Pattern p=Pattern.compile("\\d+.\\d+");
    		Matcher m=p.matcher(s);
    		while(m.find()){
    				s=m.group();
    				System.out.println(s);
    		}
    		}
    Comme ça?

  7. #7
    Membre éclairé Avatar de spilliaert
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 268
    Par défaut

    heu...non, je n'ai pas les nombres séparément dans un group()...
    Je voudrais les récupérer un à un chacun dans un group.

    Si j'ai "che(54.4:58.4:98.4)", je voudrais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    group(1)=54.4;
    group(2)=58.4;
    group(3)=98.4;
    En fait, je pense que ce ne soit pas possible. Je devrais donc faire du "bricolage" avec du String.split()

    Merci

  8. #8
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    Pattern p1=Pattern.compile("Che\\(((\\d+.\\d+:)*(\\d+.\\d+)*)\\)");
    Matcher m1=p1.matcher("Che(50.4:80.4:10.36:25.56:)");
    ArrayList group=new ArrayList();
    if(m1.matches()){
    		String s=m1.group(1);
    		Pattern p=Pattern.compile("\\d+.\\d+");
    		Matcher m=p.matcher(s);
    		while(m.find()){
    			group.add(m.group());
    			}
    }

  9. #9
    Membre éclairé Avatar de spilliaert
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    268
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 268
    Par défaut
    Merci bq seriousme, ça marche très bien...


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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/11/2009, 01h51
  2. [Regex] Nombre de groupes variables ?
    Par osopardo dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 20/09/2006, 16h29
  3. Macros et nombre d'arguments variable
    Par kaisse dans le forum C
    Réponses: 7
    Dernier message: 28/07/2005, 10h10
  4. Nombre d'arguments variable
    Par gege2061 dans le forum C
    Réponses: 7
    Dernier message: 05/08/2004, 15h43
  5. Réponses: 5
    Dernier message: 25/11/2003, 09h41

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