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

Collection et Stream Java Discussion :

[Pattern] Problème de matching


Sujet :

Collection et Stream Java

  1. #1
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2010
    Messages : 32
    Par défaut [Pattern] Problème de matching
    Bonjour à tous,


    Quelqu'un pourrait-il me dire pourquoi ma String définie ci-dessous ne vérifie pas l'expression régulière ?

    Je débute dans le domaine, donc désolé si ma question vous paraît stupide...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public static final String MY_REG_EX = "\"666\",\"[a-zA-Z0-9]{1,8}\",\"[0-9]{5}\",\"[CDEFRT]\",\".{0,12}\",\"-{0,1}(\\d{1,16})\\.(\\d{0,2})\",\"-{0,1}(\\d{1,16})\\.(\\d{0,2})\",\"-{0,1}(\\d{1,16})\\.(\\d{0,2})\"";
     
    public static void main (String[] args){
        Pattern myPattern = Pattern.compile(MY_REG_EX);
        String myCSVEntry = String myCSVEntry = "\"666\",\"TOTO4321\",\"12345\",\"C\",\"JEAN-MARC1\",\"100000000\",\"123456789.12\",\"-12345678.91\"";
     
        // Devrait retourner true mais ce n'est pas le cas
        System.out.println("Result : " + myPattern.matcher(myCSVEntry).matches());
    }

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2007
    Messages
    140
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Février 2007
    Messages : 140
    Par défaut
    String myCSVEntry = "666","TOTO4321","12345","C","JEAN-MARC1","100000000","123456789.12","-12345678.91";
    Ceci n'est pas un String mais un tableau de String...

  3. #3
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2010
    Messages : 32
    Par défaut
    Euuuh, oui, je n'avais pas formaté la String correctement... J'ai fait la modif dans mon exemple.

    C'est parce qu'en fait, dans la réalité, cette String est une entrée d'un fichier CSV (d'ou mon expression régulière).

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 764
    Par défaut
    Si dans la chaîne que tu testes, tu remplaces "100000000" par "100000000.00", le test renverra bien true...
    Maintenant, à toi de voir s'il faut revoir le format de l'entrée ou modifier ton expression régulière.

  5. #5
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2010
    Messages : 32
    Par défaut
    Nom de Zeus, tu as tout à fait raison Astartee !

    Disons que les entrées de mon fichier ne changeront pas et que c'est donc l'expression régulière que je vais devoir adapter.

    Pour symboliser un nombre positif ou négatif ayant une partie entière de 1 à 16 chiffres avec ou sans partie décimale de 1 ou 2 chiffres, est-ce que l'expression suivante convient ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -{0,1}(\\d{1,16})(\\.\\d{0,2})

  6. #6
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 690
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 690
    Par défaut
    Il y a une petite erreur car dans ton expression le point est nécessaire même pour un nombre entier.

    On peut également simplifier un peu en remplaçant replacer "{0,1}" par "?". Enfin, les parenthèse autour de \\d{1,16} ne sont pas nécessaires sauf si tu veux récupérer la valeur de ce groupe.

    La regexp suivante devrait convenir:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    -?\\d{1,16}(\\.\\d{1,2})?

  7. #7
    Membre averti
    Inscrit en
    Janvier 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Âge : 51

    Informations forums :
    Inscription : Janvier 2010
    Messages : 32
    Par défaut
    @Uther : effectivement, tu as raison pour le point. Et merci pour l'amélioration de mon expression régulière.

    Affaire classée, merci à tous !

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

Discussions similaires

  1. problème de match
    Par chong dans le forum Langage
    Réponses: 9
    Dernier message: 24/06/2008, 14h17
  2. Problème application.match et chiffres
    Par House MD dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/11/2007, 12h16
  3. Problème recherche match.. against
    Par pierre_pogo dans le forum Requêtes
    Réponses: 2
    Dernier message: 01/08/2006, 10h45
  4. [Regex] Problème de match...
    Par Hoegaarden dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 14/02/2006, 16h25
  5. Problème avec MATCH - FULLTEXT
    Par Kosti dans le forum Requêtes
    Réponses: 2
    Dernier message: 27/01/2006, 01h20

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