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 :

Syntaxe expression régulière


Sujet :

Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 16
    Par défaut Syntaxe expression régulière
    Bonjour tout le monde
    J’ai un petit souci en utilisant les expression régulière de java , en fait je veux récupérer le nom du fichier sans sa extension ni le nom de son répertoire ainsi que ces répertoires pères , donc pour ceci j’ai utilisé le code source ci-dessous mais il me lance un exception que j’arrive pas le contournée . si quelqu’un détecte la source du problème je lui en serais reconnaissant .

    import java.util.regex.*;
    String aParser="D:\\jobExtacriTransformDataAndLoad\fileTestaideDestination.csv";
    Pattern p=Pattern.compile(".*\\(.*).csv");
    Matcher m=p.matcher(aParser);
    while(m.find())
    System.out.println(m.group(1));

    et voila l'exception :

    Exception in thread "main" java.util.regex.PatternSyntaxException: Unmatched closing ')' near index 5
    .*\(.*).csv
    ^
    at java.util.regex.Pattern.error(Pattern.java:1713)
    at java.util.regex.Pattern.compile(Pattern.java:1464)
    at java.util.regex.Pattern.<init>(Pattern.java:1133)
    at java.util.regex.Pattern.compile(Pattern.java:823)
    at test.TestRegex.test2(TestRegex.java:23)
    at test.TestRegex.main(TestRegex.java:10)

    Merci d’avance

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Comme le dit le message d'erreur: tu as une parenthèse fermante qui ne correspond à rien.

    En l'occurence tu n'a pas de parenthèse ouvrante. Et pour cause, ce qui devrait être la parenthèse ouvrante est précédée d'un backslach, ce qui lui fait perdre son caractère de parethèse pour devenir un simple caractère dans la pattern.


    Je suppose que tu veux faire "backslash suivi de quelque chose".

    Tu dois double le backslash

    1 fois parce que les regexp considèrent le backslash comme un caractère échappant son suivant. Donc il faut échapper le backslash:
    Un deuxième fois car le compilateur java considère aussi le backslash comme un caractère d'échappement, qu'il convient d'échapper:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Pattern p=Pattern.compile(".*\\\\(.*).csv");

  3. #3
    Membre Expert Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Par défaut
    Salut,

    Tu n'as pas besoin de passer par une regexp pour faire ça, tu peu très bien utiliser la méthode lastIndexOf() associé a subString().

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    String aParser="D:\\jobExtacriTransformDataAndLoad\fileTestaideDestination.csv";
     
    String nomFichier = aParser.subString( aParser.lastIndexOf("\\") + 1, aParser.lastIndexOf(".") );
    Il va te prendre la chaine contenue entre le dernier "\" (donc le répertoire) et le dernier "." (donc avant l’extension);

    En pratique, il vaut mieux se passer des regexp quand c'est possible.

    Cdt.

  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
    Personnellement je trouve que le plus simple c'est d'utiliser / et non pas \ pour séparer les répertoires.
    Windows (pardon, MS-DOS,) a fait le choix, dont on comprend aujourd'hui la stupidité, d'utiliser \ comme séparateur canonique, mais ça fait plus de dix ans que l'alternative / marche parfaitement.

    Citation Envoyé par Nico02 Voir le message
    En pratique, il vaut mieux se passer des regexp quand c'est possible.
    Euh... Se passer des regex est toujours possible. Ne jamais utiliser de regex n'est pas une politique intéressante.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre Expert Avatar de Nico02
    Homme Profil pro
    Developpeur Java/JEE
    Inscrit en
    Février 2011
    Messages
    728
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Developpeur Java/JEE
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2011
    Messages : 728
    Par défaut
    Quand la solution est évidente sans, je vois pas pourquoi s’embêter à écrire une regexp.

    Après il y a surement pleins d'arguments qui justifient l'utilisation de regexp dans des cas donnés, mais à mon avis ce n'est pas le cas ici.

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2012
    Messages : 16
    Par défaut
    salut et merci pour vous tous de m'avoir accorder du temps ,
    j'ai utiliser cette solution mais sais pas pourquoi il ne marche pas :
    String aParser="D:\\jobExtacriTransformDataAndLoad\fileTestaideDestination.csv";

    String nomFichier = aParser.substring( aParser.lastIndexOf("\\") + 1, aParser.lastIndexOf(".") );

    System.out.println(nomFichier);
    Il m’affiche :
    jobExtacriTransformDataAndLoad_ileTestaideDestination

  7. #7
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par jeeland Voir le message
    jobExtacriTransformDataAndLoad_ileTestaideDestination
    Par ce qu'il te manque un \
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    aParser="D:\\jobExtacriTransformDataAndLoad\\fileTestaideDestination.csv";

  8. #8
    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
    Citation Envoyé par jeeland Voir le message
    salut et merci pour vous tous de m'avoir accorder du temps ,
    j'ai utiliser cette solution mais sais pas pourquoi il ne marche pas :
    String aParser="D:\\jobExtacriTransformDataAndLoad\fileTestaideDestination.csv";

    String nomFichier = aParser.substring( aParser.lastIndexOf("\\") + 1, aParser.lastIndexOf(".") );

    System.out.println(nomFichier);
    Il m’affiche :
    jobExtacriTransformDataAndLoad_ileTestaideDestination
    Oui mais là c'est parce que ton nom de fichier ça devrait être :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String aParser="D:\\jobExtacriTransformDataAndLoad\\fileTestaideDestination.csv";
    Enfin, je pense parce que je vois mal un form-feed dans un nom de fichier

    Fait comme a dit @Thelvin, utilise le / quand tu fais des constantes avec des path : ça t'évitera ce genre d'erreur, et ça simplifie bien la lecture et la frappe

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String aParser="D:/jobExtacriTransformDataAndLoad/fileTestaideDestination.csv";

    EDIT : mince grillé par @Tchize_ j'ai mis tant de temps que ça à entrer mon post
    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.

  9. #9
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par Nico02 Voir le message
    Quand la solution est évidente sans, je vois pas pourquoi s’embêter à écrire une regexp.

    Après il y a surement pleins d'arguments qui justifient l'utilisation de regexp dans des cas donnés, mais à mon avis ce n'est pas le cas ici.
    oui, mais je me serai quand même passé d'un solution bugguée à base de substring dans ce cas si, surtout quand File fait très bien le boulot de séparer

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

Discussions similaires

  1. Syntaxe expression régulière egrep
    Par madmaxou dans le forum Shell et commandes GNU
    Réponses: 0
    Dernier message: 30/01/2009, 16h05
  2. règle de syntaxe - expression régulière
    Par visiwi dans le forum Langage
    Réponses: 6
    Dernier message: 20/06/2008, 15h45
  3. expression régulière syntaxe
    Par Oluha dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 05/06/2007, 13h47
  4. [RegEx] Pb de syntaxe d'expression régulière
    Par renaudjuif dans le forum Langage
    Réponses: 5
    Dernier message: 07/09/2006, 20h52
  5. [RegEx] preg_replace et syntaxe des expressions régulières
    Par MmoulinexX dans le forum Langage
    Réponses: 4
    Dernier message: 04/06/2006, 23h57

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