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

avec Java Discussion :

Rechercher un string entre des guillemets (Expression régulière)


Sujet :

avec Java

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 62
    Points : 50
    Points
    50
    Par défaut Rechercher un string entre des guillemets (Expression régulière)
    Bonjour,

    Je voudrais créer une expression régulière qui rechercherait un String entre deux guillemets par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String string = "Trouve moi \"ça\"";
    je veux que l'expression régulière me renvoie la chaine "ça" tout en sachant qu'il peut y avoir plusieurs guillemets dans ma chaine par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String string = "Trouve moi \"ça\" et \"ça aussi\" ainsi que \"ça\"";  :ccool:
    et du coup elle me les récupère dans un tableau ou un a un ? comment? je n'ai pas de réponse

    Je vous remercie d'avance pour votre aide.

  2. #2
    Membre confirmé
    Avatar de Laine
    Femme Profil pro
    Doctorat informatique
    Inscrit en
    Mars 2013
    Messages
    238
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : Algérie

    Informations professionnelles :
    Activité : Doctorat informatique

    Informations forums :
    Inscription : Mars 2013
    Messages : 238
    Points : 646
    Points
    646
    Par défaut
    Bonjour

    Est ce bien ce que tu veux ?
    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
    import java.util.ArrayList;
    import java.util.Scanner;
     
     
    public class Requetes{
     
    	public static void main(String[] args) {
     
    		ArrayList<String> array= new ArrayList<String>();
    		String regex= "\"[^\"]*\"";
    		String expr= "Trouve moi \"ça\" et \"ça aussi\" ainsi que \"ça\"";
     
    		Scanner scan= new Scanner(expr);
    		String find= scan.findInLine(regex);
     
    		while(find != null) {
    		    System.out.println("Element: " + find);
    		    array.add(find);
    		    find= scan.findInLine(regex);
    		}
    	}
    }
    EDIT: oups avait pas vu pour l'ajout dans un tableau

  3. #3
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 62
    Points : 50
    Points
    50
    Par défaut
    Bonjour,

    Je vous remercie pour votre réponse mais moi je ne veux pas qu'il m'affiche les guillemets car c'est des délimiteurs c'est tout.

    Merci d'avance.

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Bonjour,

    il te faudra en plus utiliser la méthode substring() pour enlever les "".

    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
     
    import java.util.*;
     
    public class Requetes{
     
    	public static void main(String[] args) {
     
    		ArrayList<String> array= new ArrayList<String>();
    		String regex= "\"[^\"]*\"";
    		String expr= "Trouve moi \"ça\" et \"ça aussi\" ainsi que \"ça\"";
     
    		Scanner scan= new Scanner(expr);
    		String find= scan.findInLine(regex);
     
    		while(find != null) {
    		    find = find.substring(1,find.length()-1);
    		    System.out.println("Element: " + find);
    		    array.add(find);
    		    find= scan.findInLine(regex);
    		}
    	}
    }

  5. #5
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 62
    Points : 50
    Points
    50
    Par défaut
    Merci beaucoup à vous deux pour votre aide

  6. #6
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 62
    Points : 50
    Points
    50
    Par défaut
    Auriez vous un cours qui explique comment créer des expressions régulières ?. Comme ça je ne vous dérangerai plus avec mes questions basiques.

    Merci d'avance

  7. #7
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut
    Une petite idée me vient à l'esprit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    String valeurInitiale = "Je voudrais trouver\"ceci\" ainsi que \"cela\" et aussi \"ça\" pourquoi pas";
    String[] decoupe = valeurInitiale.split("\"");
    System.out.println("Résultat :");
    for (int i = 1 ; i < decoupe.length ; i+=2) System.out.println(decoupe[i]);
    Ca me semble beaucoup plus simple comme solution...

    Ah, j'oubliais ! Vous pouvez consulter ce lien, c'est lui qui m'a tout appris sur les expressions régulières :
    http://imss-www.upmf-grenoble.fr/pre...egulieres.html
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  8. #8
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 62
    Points : 50
    Points
    50
    Par défaut
    Merci pour ton aide.

    Si je voulais par exemple la chaîne qui est entre un ( et un ) que peut on mettre ?

    Merci

  9. #9
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut
    Et non, il faut chercher un peu.
    Le paramètre a fournir à la méthode java.lang.String.split(String regex) n'est autre qu'une expression régulière.
    Donc la réponse à votre question tient dans l'écriture d'une expression régulière permettant de trouver le caractère "(" ou le caractère ")". Une fois l'expression régulière au point, il suffit de la mettre en lieu et place des caractères rouges de la ligne suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String[] decoupe = valeurInitiale.split("\"");
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  10. #10
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 62
    Points : 50
    Points
    50
    Par défaut
    Mon problème est que je n'arrive pas à faire la bonne expression régulière

  11. #11
    Membre expérimenté Avatar de yann2
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 897
    Points : 1 635
    Points
    1 635
    Par défaut
    Bonjour

    Attention, la solution avec le split ne fonctionne pas.

    La chaine :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String chaine="un seul\"guillemet"
    "guillemet" n'est pas entre guillemets mais sera traitée comme telle avec la solution split.

    Pour les éléments entre parenthèses, il faut être plus précis. Que doit-on trouver dans la chaine : "j'ai (plein (de (parenthèses) par) exemple)" ?

    Yann

  12. #12
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 62
    Points : 50
    Points
    50
    Par défaut
    Entre les parenthèses on pourrait trouver du XML ou des guillemets ça dépend du paramètre reçu.

    Mais quand je reçois du XML il n y aura pas de guillemets.

    PS: Il se pourrait qu'il y est des parenthèse dans le XML ça ne gène pas ?

    Merci pour votre aide.

  13. #13
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut
    Je me permettrai simplement d'ajouter que je me suis contenté de répondre à la question initiale qui sous-entend qu'il y a toujours deux termes, guillemets ou parenthèse. Sans quoi, je n'aurai pas proposé cette solution, il es évident qu'elle est très spécifique. Mais si la condition initiale est respectée, à savoir, il y a toujours au moins deux termes ou 2xn termes, alors ça fonctionne très bien, et c'est deux cents fois plus simple.
    Mais je ne suis pas assez calé en expression régulière, et de toute évidence, vos besoins vont au-delà que de retrouver des mots entre guillemets ou parenthèses.
    Bon courage..
    Une technologie n'est récalcitrante que par ce qu'on ne la connait et/ou comprend pas, rarement par ce qu'elle est mal faite.
    Et pour cesser de subir une technologie récalcitrante, n'hésitez surtout pas à visiter les Guides/Faq du site !

    Voici une liste non exhaustive des tutoriels qui me sont le plus familiers :
    Tout sur Java, du débutant au pro : https://java.developpez.com/cours/
    Tout sur les réseaux : https://reseau.developpez.com/cours/
    Tout sur les systèmes d'exploitation : https://systeme.developpez.com/cours/
    Tout sur le matériel : https://hardware.developpez.com/cours/

  14. #14
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 62
    Points : 50
    Points
    50
    Par défaut
    En fait j'ai trouvé d'ou vient mon problème avec les parenthèses, c'est parce que c'est des caractère spéciaux pour les expressions régulières, comment les despécialiser dans mon code ? par exemple:

    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
     
     
    		String regex = "([^\"]*)";
    		String expr = "insert(<ma balise> <secondeone> </secondeone></mabalise>)";
     
    </mabalise>)";
     
    		Scanner scan= new Scanner(expr);
    		String find= scan.findInLine(regex);
     
    		while(find != null) {
    			    find = find.substring(1,find.length()-1);
    			    System.out.println("Element: " + find);
    			    array.add(find);
    			    find= scan.findInLine(regex);
    		}
    Dans le code ci-dessus je voudrais récupérer le contenu de la parenthèse précédé d'un insert. Comment pourrais je faire SVP ?

  15. #15
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Bonjour,

    essayer cela :

    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
     
    import java.util.*;
     
    public class Requetes{
     
    	public static void main(String[] args) {
     
    		ArrayList<String> array= new ArrayList<String>();
    		String regex= "[(][^)(]*[)]";
    		String expr= "Trouve (moi (ça) et (ça aussi)) ainsi que (ça)";
     
    		Scanner scan= new Scanner(expr);
    		String find= scan.findInLine(regex);
     
    		while(find != null) {
    		    find = find.substring(1,find.length()-1);
    		    System.out.println("Element: " + find);
    		    array.add(find);
    		    find= scan.findInLine(regex);
    		}
    	}
    }

  16. #16
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Encore mieux :

    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
     
    import java.util.*;
     
    public class Requetes{
     
    	public static void main(String[] args) {
     
    		ArrayList<String> array= new ArrayList<String>();
    		String regex= "[insert(][^)(]*[)]";
    		String expr= "insert(<ma balise> <secondeone> </secondeone></mabalise>)";
     
    		Scanner scan= new Scanner(expr);
    		String find= scan.findInLine(regex);
     
    		while(find != null) {
    		    find = find.substring(7,find.length()-1);
    		    System.out.println("Element: " + find);
    		    array.add(find);
    		    find= scan.findInLine(regex);
    		}
    	}
    }

  17. #17
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 62
    Points : 50
    Points
    50
    Par défaut
    Merci beaucoup pour ce retour mais si j'ai une parenthèse par exemple à l’intérieur de ce que je cherche il me la ramène elle et il ne me ramène pas la chaine que je cherche:

    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
     
    import java.util.*;
     
    public class Requetes{
     
    	public static void main(String[] args) {
     
    		ArrayList<String> array= new ArrayList<String>();
    		String regex= "[(][^)(]*[)]";
    		String expr= "insert(<ma balise> <secondeone>(Je ne veux pas de ça) </secondeone></mabalise>)";
     
    		Scanner scan= new Scanner(expr);
    		String find= scan.findInLine(regex);
     
    		while(find != null) {
    		    find = find.substring(1,find.length()-1);
    		    System.out.println("Element: " + find);
    		    array.add(find);
    		    find= scan.findInLine(regex);
    		}
    	}
    }
    dans ce cas il va me ramener "Je ne veux pas de ça" alors que moi je voudrais qu'il ramène "<ma balise> <secondeone>(Je ne veux pas de ça) </secondeone></mabalise>"

    Merci d'avance pour votre aide

  18. #18
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Re,

    Partant du principe que nous n'arrivons pas à créer cette expression régulière, il faut trouver une astuce. Je propose :

    -1- est ce que dans

    insert(<ma balise> <secondeone>(Je ne veux pas de ça) </secondeone></mabalise>)

    la dernière paranthèse ne sera-t-elle pas toujours précédée de >???? Ou au moins quand la ligne commence par insert????

    si c'est le cas je propose :

    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
     
    import java.util.*;
     
    public class Requetes{
     
    	public static void main(String[] args) {
     
    		ArrayList<String> array= new ArrayList<String>();
    		//String regex= "[insert(][^)(]*[)]";
    		String regex= "[insert(].*[>)]";
    		String expr= "insert(<ma balise> <secondeone>(coucou) </secondeone></mabalise>)";
     
    		Scanner scan= new Scanner(expr);
    		String find= scan.findInLine(regex);
     
    		while(find != null) {
    		    find = find.substring(7,find.length()-1);
    		    System.out.println("Element: " + find);
    		    array.add(find);
    		    find= scan.findInLine(regex);
    		}
    	}
    }

  19. #19
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    62
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2010
    Messages : 62
    Points : 50
    Points
    50
    Par défaut
    Votre réponse est bonne mais en testant avec cet exemple

    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
     
     
    import java.util.*;
     
    public class Requetes{
     
    	public static void main(String[] args) {
     
    		ArrayList<String> array= new ArrayList<String>();
    		String regex= "[insert(].*[>)]";
    		String expr= "test(\"1234\").insert(<ma balise> <secondeone>(coucou) </secondeone></mabalise>)";
     
    		Scanner scan= new Scanner(expr);
    		String find= scan.findInLine(regex);
     
    		while(find != null) {
    		    find = find.substring(7,find.length()-1);
    		    System.out.println("Element: " + find);
    		    array.add(find);
    		    find= scan.findInLine(regex);
    		}
    	}
    }
    le résultat obtenu est le suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    est("1234").insert(<ma balise> <secondeone>(coucou) </secondeone></mabalise>
    et non pas:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <ma balise> <secondeone>(coucou) </secondeone></mabalise>

  20. #20
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2010
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2010
    Messages : 312
    Points : 533
    Points
    533
    Par défaut
    Re

    et pourquoi vouloir à tout prix utiliser une expression régulière ???

    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
     
    import java.util.*;
     
    public class Requetes{
     
    	public static void main(String[] args) {
     
    		ArrayList<String> array= new ArrayList<String>();
    		String expr= "test(\"1234\").insert(<ma balise> <secondeone>(coucou) </secondeone></mabalise>)";
    		int debut = expr.indexOf("insert") +7;
    		int fin = expr.length()-1;
     
     
    		String find= expr.substring(debut,fin);
    		System.out.println(find);
     
    	}
    }

Discussions similaires

  1. à propos des Regex (expressions régulières)
    Par stitox dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 25/02/2011, 21h26
  2. [RegEx] Recherche du bon pattern pour une expression régulière
    Par erehcab dans le forum Langage
    Réponses: 9
    Dernier message: 17/03/2010, 13h06
  3. String contenant des guillemets
    Par kavdo34 dans le forum Langage
    Réponses: 3
    Dernier message: 15/02/2010, 11h40
  4. Réponses: 1
    Dernier message: 14/02/2010, 22h10
  5. Génération d'un String à partir d'une expression régulière
    Par yang dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 06/03/2007, 14h21

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