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

Java Discussion :

[regexp] Extraction d'une valeur depuis une chaîne


Sujet :

Java

  1. #1
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut [regexp] Extraction d'une valeur depuis une chaîne
    Bonjour à tous
    J'ai toujours de grosses difficultés à appréhender simplement les expressions régulières et c'est pour cela que je sollicite votre aide
    j'ai besoin d'extraire des valeurs à partir des 2 chaines si-dessous
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Chaine1="Status message 0045:Data opened (duration 0:00:00.016, records 193)."
    Chaine2="Status message 0003:Job finished (duration 0:00:00.204, sheets 49, sheets/min 14411.76)."
    Comment via les expressions régulières puis-je recuperer le nombre de records (193) de chaine 1
    et le nombre de feuilles (49) depuis chaine2

    Comment traduire en expression régulière : l'extraction des chiffres du 2ème champ (séparé par des virgules)
    le 2ème champ pour chaine1 est "records 193)." et pour chaine2 "sheets 49"


    Merci de votre aide
    @Argoet
    Signé : Capitaine Jean-Luc Picard

  2. #2
    Invité
    Invité(e)
    Par défaut
    Je vous propose cette solution :
    Code java : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    public class Argoet {
    	public static void main(String[] args) {
    		String Chaine1="Status message 0045:Data opened (duration 0:00:00.016, records 193).";
    		String Chaine2="Status message 0003:Job finished (duration 0:00:00.204, sheets 49, sheets/min 14411.76).";
    		Pattern pattern = Pattern.compile("Status\\s+message\\s+[\\d]+:[\\w]+\\s+[\\w]+\\s+\\(duration\\s+0:00:00.[\\d]+,\\s+[\\w]+\\s+([\\d]+)");
    		Matcher matcher1 = pattern.matcher(Chaine1);
    		if (matcher1.find()) {
    			System.out.println("Found = " + matcher1.group(1));
    		}
    		Matcher matcher2 = pattern.matcher(Chaine2);
    		if (matcher2.find()) {
    			System.out.println("Found = " + matcher2.group(1));
    		}
    	}
    }

  3. #3
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut
    Un grand merci à vous "chanyslas" c'est en partie ce que je recherchais

    Comme indiqué ci-avant , le nombre recherché se situe dans le 2ème champ séparé par une virgule ","
    je vous propose donc la solution suivante (Plus simple)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
          Pattern p = Pattern.compile("\\d+");
          Matcher m1 = p.matcher(chaine1.split(",")[1]);
          if (m1.find()) System.out.(m1.group());
     
          Matcher m2 = p.matcher(chaine2.split(",")[1]);
          if (m2.find()) System.out.(m2.group());
    Signé : Capitaine Jean-Luc Picard

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    À ce niveau-là, d'aucuns pourraient trouver que ceci est encore plus simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Pattern p = Pattern.compile(",.*?(\\d+)");
    Matcher m = p.matcher(chaine1);
    if (m.find()) {
      System.out.(m.group(1));
    }
    Pas besoin de gérer des split() et des indexes quand on a une regex qui travaille.
    (Par contre il faut être à l'aise pour lire ",.*?(\\d+)" et comprendre qu'on cherche les premiers chiffres après une virgule, ça c'est vrai.)
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Avatar de argoet
    Inscrit en
    Mai 2002
    Messages
    582
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 582
    Points : 562
    Points
    562
    Par défaut
    Citation Envoyé par thelvin Voir le message
    (Par contre il faut être à l'aise pour lire ",.*?(\\d+)" et comprendre qu'on cherche les premiers chiffres après une virgule, ça c'est vrai.)
    c'est tous le problème
    Merci à vous Thelvin
    @Argoet
    Signé : Capitaine Jean-Luc Picard

  6. #6
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Dans ce cas, autant éviter le quantificateur non-gourmand .*? et le remplacer par une classe de caractères ne contenant pas les chiffres avec un quantificateur gourmand \\D*, soit ,\\D*(\\d+).
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 13/04/2015, 11h17
  2. Réponses: 1
    Dernier message: 14/03/2008, 11h48
  3. Insérer une valeur depuis une requête vers un formulaire
    Par baila dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 07/08/2007, 11h07
  4. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48
  5. [SQL] Affichage d'une valeur depuis une requête
    Par kitty2006 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 19/09/2006, 16h38

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