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 :

Quelle expresion régulière ?


Sujet :

Java

  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut Quelle expresion régulière ?
    Bonjour,
    J'ai un fichier que je parse qui ressemble à ça :
    l.1 : 452658524.542586;425.6;875.8475;4587.5478
    l.2 : ;0;0;0
    l.3 : 0;;;
    l.4 : 458.23;475.24;4214.98;47859.69

    Je ne veux pas traiter l.2 et l.3, en fait celle qui ne contiennent :
    --> QUE des ";" OU
    --> QUE des ";" ET ( des "0" (peu importe l'ordre ou le nombre de "0") OU des " " (peu importe l'ordre ou le nombre de " "))

    Avez-vous une idée de quelle expression régulière je peux utiliser pour ça s'il vous plaît ?
    D'avance merci.

  2. #2
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Hello,

    Ben, ';' ou '0' étoile.

    Cela dit je vois pas trop l'intérêt d'une expression régulière. Si tu veux pas traiter ces lignes, ne les traite pas... Ça sert à quelque chose de vérifier avant ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    L'idée c'est justement de savoir quelles lignes je dois ignorer, et pour cela je dois les détecter en vérifiant que ma ligne de lecture en cours n'est pas du type de celles que je veux ignorer.
    Mais je ne suis pas très fort en expression régulière et j'espérais que quelqu'un pourrait me donner un coup de main là-dessus.
    Ça donne quoi concrètement en expression régulière ce que tu as indiqué ? Je ne vois pas trop là... Il faut que ça puisse être n'importe quelle suite de "0" ou de ";" ou de " ". Et ça uniquement.

  4. #4
    Modérateur

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

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Bien sûr qu'on peut t'aider.

    Est-ce que tu peux nous faire une petite liste rapide des regex que tu sais déjà utiliser ? Les tutoriels que tu as lus et assimilés, ce genre de choses.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Bien sûr qu'on peut t'aider.

    Est-ce que tu peux nous faire une petite liste rapide des regex que tu sais déjà utiliser ? Les tutoriels que tu as lus et assimilés, ce genre de choses.
    Oui je peux cliquer "tutorial regex" sur google et te donner les liens des 20 premiers résultats si tu veux mais je ne sui pas sûr que ça nous avance beaucoup...
    Quand je dis que je connais c'est que je m'en suis déjà servis plusieurs fois, souvent en m'inspirant de regex trouvées sur des forums mais là je n'en ai pas trouvé qui se rapprochent de mon besoin.
    Pour essayer d'être plus clair, voici à quel endroit j'en ai besoin :
    J'ai un fichier File1 avec 5 lignes par exemple :
    3.4444444;8.9;6.7;6.1;1.2
    ;0;;;0
    0;0;;;0
    ;;0;;0
    5.6;7.4;5.6;2.2;6.3

    Et un fichier File2 avec 2 lignes :
    3.4444445;8.9;6.7;6.1;1.2
    5.6;7.4;5.6;2.2;6.3

    Je boucle sur File1 et dois sauter les lignes l2, l3 et l4 si je détecte qu'elle suit un certain pattern qui, je le sais, ne va pas avoir généré de ligne dans File2.
    On peut voir que l1 est légèrement différent dans les 2 fichiers mais je veux les comparer pour dire s'il y a une différence (ou non si j'ai un paramètre disant qu'une différence de 1% par exemple est considérée comme valide).
    A la place d'une regex, je pourrais faire une fonction à chaque lecture de ligne pour vérifier qu'avec un split avec ";" comme delimiter, si je me retrouve qu'avec des éléments "" ou "0". Dans ce cas je sais que je ne dois pas traiter la ligne. Mais c'est ce que ferait une regex de manière beaucoup plus élégante et efficace. Seulement voilà, je ne le fais pas exprès je le jure thelvin... mais je ne sais pas faire, c'est pas trop grave j'espère ?
    Donc voilà, si quelqu'un s'y connait en regex, et bien j'accepterais bien un coup de main qui me sert à moi dans un premier temps mais aussi dans le futur à d'autres personnes qui pourront tomber sur ce post pour réaliser leur regex, dos ma demande via un forum. Et je me ferai un plaisir de valider ensuite si ça fonctionne comme je le fais en quasi permanence afin d'avoir un post complet quant à la question et une réponse testée et validée.
    Encore merci d'avance à ceux qui pourrait donc répondre de manière positive à cette question.

  6. #6
    Membre éclairé Avatar de domiq44
    Homme Profil pro
    Inscrit en
    Novembre 2005
    Messages
    302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2005
    Messages : 302
    Par défaut
    Bonjour jmclej,

    Essaie quelque chose comme ça alors :

    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
    18
    19
    20
    21
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.Reader;
     
    public class Main {
     
    	public static void main(String[] argv) throws Exception {
    		InputStream in = Main.class.getResourceAsStream("infile1.txt");
    		Reader fr = new InputStreamReader(in, "utf-8");
    		BufferedReader reader = new BufferedReader(fr);
    		String line;
    		while ((line = reader.readLine()) != null) {
    			if (line.trim().matches("^[0,;]+$")) {
    				System.out.println("rejected : " + line);
    			} else {
    				System.out.println("accepted : " + line);
    			}
    		}
    	}
    }
    avec ton fichier

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ;0;;;0 
    0;0;;;0 
    ;;0;;0 
    5.6;7.4;5.6;2.2;6.3
    j'obtiens ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    rejected : ;0;;;0 
    rejected : 0;0;;;0 
    rejected : ;;0;;0 
    accepted : 5.6;7.4;5.6;2.2;6.3

  7. #7
    Membre éclairé
    Inscrit en
    Novembre 2004
    Messages
    417
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 417
    Par défaut
    Ca semble bien être ça oui, merci pour la réponse constructive !
    Je teste sur mon code dès demain, merci beaucoup!
    2 petites questions sur les regex du coup :
    Quelle est la différence entre "^[0,;]+$" et "^0|;+$" ?
    Si je voulais rajouter le fait que ma regex doit matcher non seulement les 0 mais la suite des 3 caractères 0.0 aussi, ça donnerait quoi ?

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

Discussions similaires

  1. Développement jeux vidéo : quelles bases à avoir absolument ?
    Par Ezechiel dans le forum Développement 2D, 3D et Jeux
    Réponses: 175
    Dernier message: 20/02/2018, 16h14
  2. Débat : quelle distribution Linux choisir pour débuter ?
    Par Anonymous dans le forum Distributions
    Réponses: 227
    Dernier message: 18/02/2015, 10h09
  3. Expresion régulière en VB.net 2005
    Par katoyi dans le forum VB.NET
    Réponses: 2
    Dernier message: 11/03/2008, 22h50
  4. Réponses: 6
    Dernier message: 30/01/2008, 22h20
  5. Quelle est la fiabilité du protocole SSL ?
    Par Anonymous dans le forum Développement
    Réponses: 5
    Dernier message: 05/09/2002, 13h31

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