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 :

Aide sur un regex


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de hugoclo
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    615
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 615
    Par défaut Aide sur un regex
    Bonjour,

    Voila j'ai une valeur de type String = ABC Nuit Belle - Nuit seule 100% 0.92 3.08 4,00 335
    Comment faire pour extraire 4,00 et 335
    Au début j'ai pensé à
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String[] parts = string.split(" ");
                    System.out.println(parts[parts.length-2]);
                    System.out.println(parts[parts.length-1]);
    mais ca n'est pas trés propre
    Merci

  2. #2
    Modérateur
    Avatar de joel.drigo
    Homme Profil pro
    Ingénieur R&D - Développeur Java
    Inscrit en
    Septembre 2009
    Messages
    12 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D - Développeur Java
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2009
    Messages : 12 430
    Billets dans le blog
    2
    Par défaut
    Salut,

    Quand on décrit une expression régulière, on liste des règles, pas un exemple de cas.

    Si ton but est de récupérer les n derniers trucs qui ressemblent à un pattern (les 2 derniers qui ressemblent à un nombre à virgule ou point, de ce qu'il semble) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public static List<String> lastMatches(final String string, final Pattern pattern, final int n) {
            if ( n<=0 ) return Collections.emptyList();
    	final Matcher matcher = pattern.matcher(string);
    	final Deque<String> queue = new ArrayDeque<>(n);
    	while(matcher.find()) {
    	        if (queue.size() == n) {
    	        	queue.pop();
    	        }
    	        queue.add(matcher.group());
    	}
            return Collections.unmodifiableList(new ArrayList<>(queue));
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    public static void main(String[] args) {
     
    	final Pattern pattern = Pattern.compile("[\\d\\.,]+"); // on cherche ce qui ressemble à un nombre, avec point ou virgule
    	System.out.println(lastMatches("ABC Nuit Belle - Nuit seule 100% 0.92 3.08 4,00 335",pattern,2)); // on veut les 2 derniers
    	System.out.println(lastMatches("ABC Nuit Belle - Nuit seule 100% toto 335",pattern,2)); // on veut les 2 derniers
    	System.out.println(lastMatches("ABC Nuit Belle - Nuit seule 335",pattern,2)); // on veut les 2 derniers 
    	System.out.println(lastMatches("ABC Nuit Belle - Nuit seule 100% 0.92 3.08 4,00 335",pattern,1)); // on veut le dernier
    	System.out.println(lastMatches("ABC Nuit Belle - Nuit seule",pattern,2)); // on veut les 2 derniers
     
     
    }
    Résultat :
    [4,00, 335]
    [100, 335]
    [335]
    [335]
    []
    L'expression "ça marche pas" ne veut rien dire. Indiquez l'erreur, et/ou les comportements attendus et obtenus, et donnez un Exemple Complet Minimal qui permet de reproduire le problème.
    La plupart des réponses à vos questions sont déjà dans les FAQs ou les Tutoriels, ou peut-être dans une autre discussion : utilisez la recherche interne.
    Des questions sur Java : consultez le Forum Java. Des questions sur l'EDI Eclipse ou la plateforme Eclipse RCP : consultez le Forum Eclipse.
    Une question correctement posée et rédigée et vous aurez plus de chances de réponses adaptées et rapides.
    N'oubliez pas de mettre vos extraits de code entre balises CODE (Voir Mode d'emploi de l'éditeur de messages).
    Nouveau sur le forum ? Consultez Les Règles du Club.

  3. #3
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    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 986
    Par défaut
    Citation Envoyé par hugoclo Voir le message
    mais ca n'est pas trés propre
    Si c'est bien les deux derniers champs que tu dois récupérer et que tu n'as pas à contrôler leurs formats, je ne vois pas en quoi ça ne serait pas très propre (ce qui est au passage une expression fourre-tout. À part peut-être Mr Propre, personne n'est détenteur d'une propreté universelle). C'est une manière simple de procéder et je ne suis pas certain qu'utiliser une regex à la place apportera une véritable plus-value.

    Par contre si tu dois t'assurer du format de tes champs (ou d'autre chose dans la ligne), la regex peut se justifier.

Discussions similaires

  1. [RegEx] aide sur deux regex
    Par noobyyy dans le forum Langage
    Réponses: 7
    Dernier message: 10/02/2010, 14h53
  2. [Regex C#] Aide sur une regex qui recupere des controles
    Par kerjon dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 14/05/2009, 14h10
  3. aide sur un regex.
    Par Flopp dans le forum C#
    Réponses: 0
    Dernier message: 13/04/2009, 20h10
  4. Aide sur les regex
    Par etranger dans le forum Langage
    Réponses: 12
    Dernier message: 30/08/2006, 22h32
  5. une aide sur un regex svp :)
    Par hansaplast dans le forum Langage
    Réponses: 2
    Dernier message: 19/10/2005, 11h22

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