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 :

Regexp : impossible d'enlever un caractere de fin à une chaine


Sujet :

Collection et Stream Java

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Août 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Regexp : impossible d'enlever un caractere de fin à une chaine
    Bonjour à tous,

    Une regexp me pose problème :
    je récupère un String composé d'une entete, d'un message, et d'un caractère de fin. Le but de ma regexp est de récupérer le message.
    exemple de message:
    "debut_entete bla bla bla fin_entete
    message - 554345 $^*$ blabla
    fin du message
    -"

    J'arrive facilement à éliminer l'entete car je sais comment mon message va commencer. Cependant, même si je sais comment mon message va se terminer (un caractere "-" ou rien), je n'arrive pas à récupérer le message correctement.
    Notez que le "-" peut aussi figurer dans le message.

    1ere solution, voici ma regexp :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((fin_entete)(.*\\W)*)-
    Ca marche très bien quand il y a un "-" à la fin du message.
    Par contre, quand il n'y a rien, je reste bloqué définitivement sur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (regexp.match(message))
    2eme solution :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((fin_entete)(.*\\W)*)-?
    Je rajoute le "?" car mon "-" de fin est optionnel.
    Ici tout se passe bien, plus de blocage, mais par contre je récupère le "-" avec le message... Ca ne sert dont à rien

    Note : dans les 2 cas je mets mon "level" de regexp à 1.

    J'ai essayé tout et n'importe quoi, mais rien à faire, impossible de récupérer le message sans le "-" ou sans planter quand il ne figure pas à la fin.

    Merci d'avance pour votre aide précieuse !

  2. #2
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Citation Envoyé par dukesgf
    Ici tout se passe bien, plus de blocage, mais par contre je récupère le "-" avec le message... Ca ne sert dont à rien
    et bien pourquoi ne pas tester si ton dernier caractère est -. Si oui tu l'enlève (par un substring)

    je ne vois pas trop le pb ... à moins que je n'ai pas compris ....
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  3. #3
    Rédacteur

    Homme Profil pro
    Geek entrepreneur
    Inscrit en
    Novembre 2004
    Messages
    1 224
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Geek entrepreneur

    Informations forums :
    Inscription : Novembre 2004
    Messages : 1 224
    Points : 2 373
    Points
    2 373
    Par défaut
    Peut être parce qu'il aimerait plutot avoir une expression régulière capable de récupérer une chaine avec un motif plutot que de récupérer une chaine puis de faire encore des traitements dessus derrière.
    Comme solution de contournement il peut effectivement faire ça mais la solution propre serait quand même d'avoir une regexp qui marche.

  4. #4
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    oki oki ...

    désolé je suis nul en regexp
    "If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

    Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Août 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par hugo123
    Peut être parce qu'il aimerait plutot avoir une expression régulière capable de récupérer une chaine avec un motif plutot que de récupérer une chaine puis de faire encore des traitements dessus derrière.
    Comme solution de contournement il peut effectivement faire ça mais la solution propre serait quand même d'avoir une regexp qui marche.
    Oui voila effectivement. Car je mets la regexp dans un fichier properties paramétrable, comme ca pas besoin de modifier le code en cas de changement.
    Il faudrait donc que je puisse faire tout ca dans une regexp.

  6. #6
    Expert éminent

    Avatar de denisC
    Profil pro
    Développeur Java
    Inscrit en
    Février 2005
    Messages
    4 050
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 4 050
    Points : 7 641
    Points
    7 641
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((fin_entete)(.*\\W)*)(?=-?)
    Voire eventuellement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((fin_entete)(.*\\W)*)(?:-?)
    ou avec des parentheses:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((fin_entete)(.*\\W)*)(?=(-?))
    Enfin, c'est la syntaxe Javascript, je suppose que la syntaxe Java est très proche....

  7. #7
    Membre confirmé Avatar de broumbroum
    Profil pro
    Inscrit en
    Août 2006
    Messages
    406
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2006
    Messages : 406
    Points : 465
    Points
    465
    Par défaut Classe Formatter
    Il existe une classe Formatter qui est très facile à utiliser pour les écritures formatées.
    par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Appendable sw_log = new StringBuffer(); // Appendable interface
    JTextField sw_formatPrintID = new JTextField("exmple format: arg1 -> $1s arg 2 -> $2s");
    Formatter formatter = new Formatter(sw_log);
     
    public boolean checkMsg() {
    <div style="margin-left:40px">String ID = new String[]{"premier msg","deuxieme msg","etc."};
    for(int i = 0; i < ID.length; i++) {
    <div style="margin-left:40px">if(ID[i] != null) formatter.format(sw_formatPrintID.getText(), ID[i], i); }
    Pattern pat = Pattern.compile(sw_log.toString());
    return pat.matcher(sw_formatPrintID.getText()).matches();</div></div>}

  8. #8
    Nouveau Candidat au Club
    Inscrit en
    Août 2006
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par denisC
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((fin_entete)(.*\\W)*)(?=-?)
    Voire eventuellement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((fin_entete)(.*\\W)*)(?:-?)
    ou avec des parentheses:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ((fin_entete)(.*\\W)*)(?=(-?))
    Enfin, c'est la syntaxe Javascript, je suppose que la syntaxe Java est très proche....
    Effectivement, j'utilise l'API jakarta-regexp 1.4, et cette syntaxe ne passe pas

  9. #9
    Expert confirmé
    Avatar de le y@m's
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    2 636
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2005
    Messages : 2 636
    Points : 5 943
    Points
    5 943
    Par défaut
    Je ne connais pas l'API jakarta-regexp, mais avec la méthode find() de la classe Matcher tu peux récupérer le message avec l'expression régulière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (?<=(fin_entete)).*[^-]
    Donc pour le texte
    debut_entete bla bla bla fin_entete
    message - 554345 $^*$ blabla
    fin du message
    -
    cela te donne
    message - 554345 $^*$ blabla
    fin du message
    Je ne répondrai à aucune question technique par MP.

    Pensez aux Tutoriels et aux FAQs avant de poster (pour le java il y a aussi JavaSearch), n'oubliez pas non plus la fonction Rechercher.
    Enfin, quand une solution a été trouvée à votre problème
    pensez au tag

    Cours Dvp : http://ydisanto.developpez.com
    Blog : http://yann-disanto.blogspot.com/
    Page perso : http://yann-disanto.fr

Discussions similaires

  1. enlever les espaces blancs d une chaines de caracteres
    Par Mobistar dans le forum Débuter avec Java
    Réponses: 19
    Dernier message: 04/08/2008, 19h26
  2. enlever les caracteres alphabetiques d'une expression
    Par freestyler dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 12/03/2008, 17h29
  3. Enlever des caracteres en debut de chaine
    Par Mathieu.Nanoux dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 17/07/2007, 11h14
  4. supprimer un caractere en fin de chaine
    Par makohsarah dans le forum Langage
    Réponses: 6
    Dernier message: 10/08/2006, 13h53
  5. comment supprimer des caracteres en fin de chaines
    Par BernardT dans le forum Langage
    Réponses: 1
    Dernier message: 19/07/2006, 17h41

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