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 :

[Regex]Extraire des données suivies par un pattern OU une fin de ligne


Sujet :

Java

  1. #1
    Membre habitué Avatar de flotho
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Novembre 2006
    Messages : 156
    Points : 154
    Points
    154
    Par défaut [Regex]Extraire des données suivies par un pattern OU une fin de ligne
    Bonjour,

    J'aimerai savoir si ce que je souhaite est réalisable.
    Voici le type de données en entrée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    930(  ) $cC $dA $gR $hHRA $i sdjhsd
    930(  ) $cY $dv $gR $hHRA
    j'aimerai extraire le bloc $h qui peut être suivi ou non d'autres blocs en $

    Voici ce que je suis parvenu à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ^930\(.*\$g(.*)\$h(.*)(?:\$.*) => fonctionne si un $ derrière
    ^930\(.*\$g(.*)\$h(.*) fonctionne sans $ derrière
    j'aimerai unifier les deux conditions est ce possible en Java

    Merci d'avance de votre aide éclairée
    Fondateur www.mind-and-go.com
    Créateur www.kipigo.com
    Linux | Java EE | NB Platform | Pentaho | PostgreSQL | OpenERP

  2. #2
    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
    C'est simple au lieu d'utiliser systématiquement .* pour décrire les "zones grises" de ta chaîne, appuies toi sur les classes de caractères.
    Ici tout ce que tu souhaites, ce sont les caractères non blancs situés après $h, donc utilises \$h(\S+) (où \S est la classe des caractères non blancs, l'inverse de \s) pour les décrire et peu importe ce qu'il y a après, tu peux très bien te passer de décrire la suite de la chaîne.

    En général mieux vaut éviter d'utiliser .* quand c'est possible (et pertinent) car c'est très peu descriptif (=aucune contrainte). En plus, comme le quantificateur est gourmand, ça peu éventuellement générer beaucoup de backtracking, et deux fois dans la même pattern ça peut même planter le moteur de regex.
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  3. #3
    Membre habitué Avatar de flotho
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Novembre 2006
    Messages : 156
    Points : 154
    Points
    154
    Par défaut
    Bonjour et merci de votre réponse.

    Citation Envoyé par CosmoKnacki Voir le message
    En général mieux vaut éviter d'utiliser .* quand c'est possible (et pertinent) car c'est très peu descriptif (=aucune contrainte). En plus, comme le quantificateur est gourmand, ça peu éventuellement générer beaucoup de backtracking, et deux fois dans la même pattern ça peut même planter le moteur de regex.
    Je prends note de cela et serais vigilant.

    Citation Envoyé par CosmoKnacki Voir le message
    C'est simple au lieu d'utiliser systématiquement .* pour décrire les "zones grises" de ta chaîne, appuies toi sur les classes de caractères.
    Ici tout ce que tu souhaites, ce sont les caractères non blancs situés après $h, donc utilises \$h(\S+) (où \S est la classe des caractères non blancs, l'inverse de \s) pour les décrire et peu importe ce qu'il y a après, tu peux très bien te passer de décrire la suite de la chaîne.
    Je comprends l'idée sauf que je ne parviens pas au résultat escomptée avec votre proposition. Je reprécise mon exemple.
    Je peux avoir les types de données suivantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $hHRA et plus si on veut $i sdjhsd
    $hHRA et plus si on veut
    Notez bien que des espaces peuvent apparaître dans la chaîne et en fin de chaîne ce qui ne me permet pas d'utiliser \S qui sors dès la présence d'espace.
    Dans les deux cas j'aimerai récupérer exactement "HRA et plus si on veut "
    J'ai donc essayé les différentes syntaxe sans succès, je ne vous les listes pas car elles sont certainement trop exotiques ;-)

    merci d'avance de votre aide
    Fondateur www.mind-and-go.com
    Créateur www.kipigo.com
    Linux | Java EE | NB Platform | Pentaho | PostgreSQL | OpenERP

  4. #4
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Salut,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    private final static Pattern HBLOCK_PATTERN = Pattern.compile("\\$h" // qui commence par $h 
    			+"[^$]+" // suivi d'au moins un caractère autre que $ (ou remplacer + par * si c'est de 0 à n)
    			);
    private static String extraireHBlock(String input) {
     
    	final Matcher matcher = HBLOCK_PATTERN.matcher(input);
     
    	if ( matcher.find() ) {
    		return matcher.group();
    	}
    	return null;
     
    }
    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.

  5. #5
    Membre habitué Avatar de flotho
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Novembre 2006
    Messages : 156
    Points : 154
    Points
    154
    Par défaut
    Merci à tous de vos contributions,

    Voici la réponse qu'il me fallait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ^930.*\$h([^\$]*)\$?.*$
    En synthèse :
    • Tout ce qui commence par 930
    • Une suite de caractères quelconque
    • Puis un $h
    • Puis un groupe qui ne contient pas dollar
    • puis soit dollar une fois avec des caractères
    • puis fin de ligne
    Fondateur www.mind-and-go.com
    Créateur www.kipigo.com
    Linux | Java EE | NB Platform | Pentaho | PostgreSQL | OpenERP

  6. #6
    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 : 54
    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
    Points : 29 131
    Points
    29 131
    Billets dans le blog
    2
    Par défaut
    Ou simplement "^930.*\\$h([^$]*).*$".
    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.

  7. #7
    Membre habitué Avatar de flotho
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Novembre 2006
    Messages
    156
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Novembre 2006
    Messages : 156
    Points : 154
    Points
    154
    Par défaut
    Merci à vous deux
    Fondateur www.mind-and-go.com
    Créateur www.kipigo.com
    Linux | Java EE | NB Platform | Pentaho | PostgreSQL | OpenERP

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 02/03/2015, 15h01
  2. Extraire des données d'un site sans passer par une API
    Par Addon75 dans le forum Général Dotnet
    Réponses: 5
    Dernier message: 29/06/2014, 16h02
  3. [MySQL] Comment extraire des données dans un fichier .svc depuis une page web
    Par pierrot10 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 18/12/2013, 12h02
  4. [XL-2003] Extraire des données en fonction d'un jour par rapport à la colonne date
    Par fanfan89 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/08/2010, 16h14
  5. [RegExp] REGEX pour extraire des données
    Par Nicopilami dans le forum Général JavaScript
    Réponses: 0
    Dernier message: 13/08/2010, 11h16

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