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 :

[Regex] effacer la fin d'une chaine de caractère


Sujet :

Collection et Stream Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Par défaut [Regex] effacer la fin d'une chaine de caractère
    Bonjour, je souhaite effacer la fin d'une chaine de caractère, mais je ne trouve pas la bonne expressions régulières.
    plus précisément j'ai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    String toto;
    toto = " toto      =  187zjkhjklhdc18_&453";
    Et je souhaite effacer tout ce qui est après le signe =.
    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    toto = toto.replaceAll("^ *=", "");
    toto = toto.replaceAll("^ *= *\w* *", "");
    mais ça ne marche pas.
    D'autre part, les symboles \s ou \w provoque une erreur de compilation, comment lui faire reconnaitre ces regex?

    Merci d'avance pour votre aide.

  2. #2
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Par défaut une partie de la réponse
    J'ai trouvé un moyen d'effacer ma fin de ligne
    je cherche l'index du caractère '=', ensuite je prends le substring qui commence à cette index, puis je le remplace par la chaine de caractère vide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    int index = toto.indexOf("=");
    String temp = toto.substring(index);
    toto = toto.replaceAll(temp, "");
    Par contre, quelqu'un peut me dire comment ou au moins pourquoi les symboles d'expressions régulières du types \s, ou \w, ne fonctionne pas.
    J'ai mis le import java.util.*
    donc je ne vois pas.
    Merci d'avance

  3. #3
    Nouveau membre du Club
    Profil pro
    Ingénieur Logiciel
    Inscrit en
    Juin 2009
    Messages
    6
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur Logiciel

    Informations forums :
    Inscription : Juin 2009
    Messages : 6
    Par défaut
    Salut !
    Tu as l'air d'utiliser ta regex dans une string que tu vas lire dans une méthode, donc je pense qu'il faut doubler les \ et en placer devant certains autres caractères, à chaque fois que j'ai des problèmes avec des regex c'est à cause de ca ^^;. C'est assez horrible mais ca doit donner quelque chose comme ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    toto = toto.replaceAll("^ \\*=", "");
    toto = toto.replaceAll("^ \\*= \\*\\w\\* \\*", "");
    Essaye au moins de doubler les \ devant les w et les s.

    Ensuite si tu cherches juste à séparer par rapport au signe =, pourquoi ne pas plutôt utiliser une méthode split, sachant que tu connais le caractère de séparation. Tu ferais quelque chose du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    toto = toto.split("=")[0];
    Et comme ca tu récupèrerais la partie de ta string avant le signe "=".
    La méthode split est à mon avis beaucoup plus facile à utiliser, si ce que tu cherches c'est juste à prendre la partie de la string placée avant le "=".

  4. #4
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 691
    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 691
    Par défaut
    pour effacer ce qu'il y a après le = le plus simple serait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str.replaceAll("^(.*?=).*", "$1");
    Quant au \ c'est un caractère spécial en java quand tu l'utilise entre guillemets il sert a donner un sens particulier au caractère qui le suit par exemple \n est un retour de ligne, \t une tabulation...
    Si tu veux utiliser \ dans une expression régulière il te faut donc faire "\\" pour qu'il soit interpréter comme un \ normal.

  5. #5
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Par défaut un peu plus d'explication
    Tout d'abord merci pour vos réponses.

    Effectivement je n'avais pas compris qu'il fallait doubler les \\. Mais ma regex n'était pas bonne avec non plus


    par contre Uther je ne comprend pas la regex que tu propose. Elle efface effectivement tout ce qui est après le signe =, mais je souhaite effacer tout les espaces vides avant le =, le = , puis tout ce qui a après le = pour ne recuperer que le mot.

    par exemple avec "toto = 46815erzrze" je veux recuperer uniquement "toto".

    Peux tu m'expliquer un peu plus ta regex? ou me donner un lien vers un tuto ou cours sur l'utilisation des regex?
    je ne comprend pas le ? vu que tu a déjà .*
    et que signifie $1 ?

    Merci d'avance

  6. #6
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 691
    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 691
    Par défaut
    si tu veux également supprimer le = et les espaces le précédent il faut faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    str.replaceAll("^(.*?) *=.*", "$1");
    le $1 représente le premier groupe entre parenthèse dans la regex. Je remplace donc toute la ligne par le contenu entre parenthèses.

    Le ? après le * sert a limiter son avidité. En effet par défaut le * consomme autant de caractères que possible, tant que ca ne rend pas la regex invalide. Au contraire le *? consomme le minimum de caractères nécessaires à rendre la regex valide
    Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    String str = "toto = 18zo = 23u";
    str.replaceAll("^(.*) *=.*", "$1")   //retourne "toto = 18zo "
    str.replaceAll("^(.*?) *=.*", "$1")   //retournera "toto"

  7. #7
    Membre habitué
    Inscrit en
    Avril 2008
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 10
    Par défaut regex
    merci beaucoup pour la qualité de tes réponses.

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 14/01/2011, 13h46
  2. [XL-2003] Placer automatiquement un caractère à la fin d'une chaine de caractère
    Par pomdeterfrite dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 12/11/2010, 11h00
  3. Réponses: 5
    Dernier message: 02/12/2009, 00h27
  4. [RegEx] Détection de la fin d'une chaine de caractères
    Par fourchette dans le forum Langage
    Réponses: 8
    Dernier message: 24/07/2009, 21h23
  5. Enlever la fin d'une chaine de caractères
    Par snyfir dans le forum Langage
    Réponses: 4
    Dernier message: 07/08/2008, 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