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 expression Regex utiliser?


Sujet :

Java

  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 54
    Par défaut Quelle expression Regex utiliser?
    Bonjour,

    Je cherche à remplacer un ou deux caractères qui sont placés de la façon suivante :

    xxxxxxxxxx[xxxx,'N',xxxxxxxx]xx[xxxx,'CC',xx]....
    [xxxx,'XC',xx]xxxx[xxxxxxxxx,'CV',xx]....
    ....
    [xxxxxxxxxxx,'A',xx]xxxx[xxxxxxxxx,'B',xx]....
    ....
    ....
    Où les x représentent des chaînes de caractères aléatoires.

    Je compte faire le remplacement en utilisant l'API Regex, je suis cependant grand débutant en Regex...

    Voici un test que j'ai fait :

    public static void main(String[] args) {
    // TODO Auto-generated method stub
    // compilation de la regex avec le motif : "thé"
    Pattern p = Pattern.compile(".^([.thé|.]).");
    // création du moteur associé à la regex sur la chaîne "J’aime le thé."
    Matcher save = p.matcher("J’aime le [thé]");
    System.out.print(save);
    // remplacement de toutes les occurrences de "thé" par "chocolat"
    String s = save.replaceAll("chocolat");
    System.out.println(s);
    }
    Aucun remplacement ne s'effectue cependant...

    Pourriez-vous m'aider?

    Avec mes remerciements

  2. #2
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 54
    Par défaut
    Même l'expression :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		// compilation de la regex avec le motif : "thé"
    			Pattern p = Pattern.compile(".[[A-Z]{1,3}]].");
    			// création du moteur associé à la regex sur la chaîne "J’aime le thé."
    			Matcher save = p.matcher("J’aime le [A]");
    			System.out.print(save);
    			// remplacement de toutes les occurrences de "thé" par "chocolat"
    			String s = save.replaceFirst("chocolat");
    			System.out.println(s);
    	}
    Donne
    J’aime le [A]

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Par défaut
    Bonjour,

    Le résultat que tu obtiens est assez logique, les [] ont une signification dans les expressions régulières, ils permettent de définir une liste de charactères. L'expression régulière
    Va capturer "t", ou "h", ou "é".

    Quand tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    replaceFirst("chocolat");
    Tu donnes l'ordre de remplacer le premier "t", ou "h", ou "é" de la chaîne "J’aime le [thé]" par "chocolat". Tu obtiens donc "J’aime le [chocolathé]" car le "t" a été remplacé par "chocolat".

    Il faut antislasher les [] pour qu'il soient interprétés comme tu le souhaites :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    public static void main(String[] args)
        {
            // TODO Auto-generated method stub
            // compilation de la regex avec le motif : "thé"
            Pattern p = Pattern.compile("\\[thé\\]");
            // création du moteur associé à la regex sur la chaîne "J’aime le thé."
            Matcher save = p.matcher("J’aime le [thé]");
            System.out.println(save);
            // remplacement de toutes les occurrences de "thé" par "chocolat"
            String s = save.replaceFirst("chocolat");
            System.out.println(s);
        }
    Donne :
    J’aime le chocolat
    Pour en revenir à ton problème initial je n'ai pas trop compris ça :
    xxxxxxxxxx[xxxx,'N',xxxxxxxx]xx[xxxx,'CC',xx]....
    [xxxx,'XC',xx]xxxx[xxxxxxxxx,'CV',xx]....
    ....
    [xxxxxxxxxxx,'A',xx]xxxx[xxxxxxxxx,'B',xx]....
    ....
    ....
    Le plus simple serait que tu nous donnes 4 ou 5 vrais exemples, avec ce que tu as en entré, et ce que tu veux en sortie.

    Romain.

  4. #4
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 54
    Par défaut
    Bonjour rg77140,

    Merci de ta réponse.

    Voici quelques exemples :

    Si l'on a une chaîne de caractères de la forme
    xxxxxxxxxx[xxxx,'N',xxxxxxxx]xx[xxxx,'CC',xx]....

    J'aimerais remplacer par exemple remplacer : ,'N' par 'CCVV'
    ou ,'CC', par 'ttt',

    Je dois repérer mes expressions à remplacer grâce aux crochets.

    PS : Le contexte est que j'ai conçu un programme qui demande aux utilisateurs les chaînes à remplacer et les chaînes de remplacement.
    Par l'utilisation de l'API Regex, je dois repérer chaque endroits dans une chaîne de caractères où il y a des [ ] et remplacer si existence de la chaîne à remplacer dans les [ ].

  5. #5
    Membre chevronné
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    394
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 394
    Par défaut
    Est-ce que les caractères à remplacer sont toujours entre ,' ', ? Es-ce que le mot à remplacer fait toujours une ou deux lettres maximum ? Est-ce qu'il peut contenir des caractères spéciaux (', ", accents, ...)?

    Voilà qui devrait t'aider :

    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
    22
    23
    public static void main(String[] args)
        {
            String search = "N";
            String text = "DxxxNxxxxF[xNxx,'N',xxxxNxxx]xx[x,'N',x]xx[xxNx,'CC',xNx]DxNxF";
            String replacement = "TOTO";
     
            Pattern p = Pattern.compile("\\[.+?,'(" + search + ")',.+?\\]");
            // création du moteur associé à la regex sur la chaîne "J’aime le thé."
            Matcher matcher = p.matcher(text);
            StringBuffer resultat = new StringBuffer();
            int beginSubstringAt = 0;
            while (matcher.find())
            {
                String beforeMatch = text.substring(beginSubstringAt, matcher.start(1));
     
                resultat.append(beforeMatch).append(replacement);
                beginSubstringAt = matcher.end(1);
            }
            resultat.append(text.substring(beginSubstringAt, text.length()));
     
            System.out.println("Entrée : " + text);
            System.out.println("Sortie : " + resultat);
        }
    Donne :
    Entrée : DxxxNxxxxF[xNxx,'N',xxxxNxxx]xx[x,'N',x]xx[xxNx,'CC',xNx]DxNxF
    Sortie : DxxxNxxxxF[xNxx,'TOTO',xxxxNxxx]xx[x,'TOTO',x]xx[xxNx,'CC',xNx]DxNxF
    Romain.

  6. #6
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2013
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2013
    Messages : 54
    Par défaut
    Bonjour rg77140,

    Cela est vraiment très intéressant.

    L'utilisateur pourra choisir de remplacer une chaîne telle que ",'N'" ou ,"'CC',".
    Ainsi, les caractères spéciaux seraient entrés par l'utilisateur et non pas cherchés dans le programme, le mot à remplacer peut environ faire 10 lettres au maximum

    Merci de ton aide

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/09/2006, 21h52
  2. [C#][OpenGL] Quelle bibliothèque pour utiliser OpenGL en C#
    Par glKabuto dans le forum Windows Forms
    Réponses: 6
    Dernier message: 23/05/2006, 13h56
  3. [IDE][VB2005 Express]Comment utiliser SQLServer via ODBC?
    Par BillyboyK dans le forum Visual Studio
    Réponses: 8
    Dernier message: 27/03/2006, 11h31
  4. [IDE][VS2005 Express]Comment utiliser Diagramme de classes?
    Par sat478 dans le forum Visual Studio
    Réponses: 2
    Dernier message: 11/03/2006, 16h45
  5. Quelle librairie (portable) utiliser pour le son ?
    Par Nico*3-3 dans le forum Bibliothèques
    Réponses: 20
    Dernier message: 19/03/2005, 00h01

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