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 :

Besoin d'aide sur une regex


Sujet :

Langage Java

  1. #1
    Membre averti
    Inscrit en
    Février 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 30
    Par défaut Besoin d'aide sur une regex
    Bonjour,

    Je cherche à parser un fichier à l'aide de la classe Scanner en fonction d'une expression régulière.

    Mon fichier contient une succession de blocs de la forme:

    valeur1COLvaleur2COLvaleurNENDvaleur1COLvaleur2ENDvaleurENDvaleurXCOLvaleurYEND etc....

    un bloc peut contenir 0 ou plusieurs fois la chaine valeurCOL et doit se terminer par valeurEND
    valeur peut prendre n'importe quel caractère

    Je chercher à parser mon document à partir d'une regexp qui représente le pattern décrit plus haut:
    Actuellement j'utilise la regex: ((.)+(COL))*((.)+(END))

    Je parse mon fichier de la manière suivante:

    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
     
    // J'initialise le Scanner avec une String pour simplifier
    scanner = new Scanner("111COL222COL333END111COL222END111END");
     
    final Pattern pattern = Pattern.compile("((.)+(COL))*((.)+(END))");
    while (scanner.findInLine(pattern) != null) {
     
    	final MatchResult match = scanner.match();
     
    	for (int i = 0; i < match.groupCount(); i++) {
    		LOGGER.debug("VAL=" + match.group(i));
    	}
     
    	if (scanner.hasNext(pattern)) {
    		String nextLine = scanner.next(pattern);
    	} 
    }
    J'obtiens le résultat :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    RESULT=111COL222COL333END111COL222END111END
    RESULT=111COL222COL333END111COL
    RESULT=1
    RESULT=COL
    RESULT=222END111END
    RESULT=1
    Alors que je souhaite qu'il me détecte 3 blocs distincts sous la forme
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    RESULT=111
    RESULT=222
    RESULT=333
     
    RESULT=111
    RESULT=222
     
    RESULT=111
    Quelqu'un peut m'indiquer ce qu'il ne va pas avec mon code ?

    Merci

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    55
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 55
    Par défaut
    tu peux utiliser simplement la méthode split, regarde l'api

  3. #3
    Membre averti
    Inscrit en
    Février 2005
    Messages
    30
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 30
    Par défaut
    split().. de la classe String ?

    L'objectif est de lire les données depuis un fichier, en parsant le fichier bloc par bloc... donc je ne vois pas l'utilité de la méthode String.split()..

  4. #4
    Expert confirmé
    Avatar de sinok
    Profil pro
    Inscrit en
    Août 2004
    Messages
    8 765
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2004
    Messages : 8 765
    Par défaut
    Un split sur END te donne l'intégralité des blocs dans un table,puis pour chaque bloc un split sur COL te donne l'intégralité des valeurs dans un second tableau.

Discussions similaires

  1. [RegEx] Besoin d'aide sur une regex
    Par kairi084 dans le forum Langage
    Réponses: 13
    Dernier message: 13/02/2014, 11h52
  2. besoin d'aide sur une requette sql
    Par maxidoove dans le forum Langage SQL
    Réponses: 13
    Dernier message: 10/10/2005, 18h42
  3. Besoin d'aide sur une fonction
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 30/08/2005, 17h40
  4. Réponses: 1
    Dernier message: 03/08/2005, 11h41
  5. Besoin d'aide sur une requête (JOIN + COUNT ?)
    Par PanzerKunst dans le forum Langage SQL
    Réponses: 2
    Dernier message: 01/06/2005, 10h29

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