...
>Message édité plusieurs fois, voir le edit 3 pour la question actuelle<
...
Bonjour,
Je dois parser des lignes de la forme
mot(mot)
ou
mot(mot,mot,mot)
Avec entre les parenthèse un nombre non finis de mots séparés par des virgules. Quelques espaces pouvant apparaitre.
Je souhaite récupérer tous les "mot"
J'utilise le code suivant :
Logiquement si je passe une ligne comme mot1(mot2,mot3,mot4)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Pattern p = Pattern.compile("(\\w+) *\\(((\\w+) *,? *)+\\)"); Matcher m = p.matcher(maLigne);
Et une boucle de la forme
Devrais m'afficher les mots les uns a la suite des autres.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 while( m.find() ) { System.out.println(m.group()); }
Soit ma regexp est fausse, soit je me trompe dans l'utilisation du matcher...
Merci de m'éclairer. :jap:
edit : changement de la regexp par "(\\w+) *\\(((\\w+) *,? *)+\\)", celle-ci match toutes mes lignes donc elle doit être bonne.
edit 2 : J'ai trouvé, je cherchais a matcher ma chaine pour en extraire des groupes, mais en fait il faut matcher les groupes que l'on souhaite.
Mon bon code (tout con quand j'y pense) :
Avec la ligne mot1(mot2,mot3,mot4) résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 Pattern p = Pattern.compile("(\\w+)"); Matcher m = p.matcher(maLigne); while( m.find() ) { System.out.println(m.group()); }
edit 3 : Finalement j'ai toujours un problème avec d'autres chaines
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 mot1 mot2 mot3 mot4
Je souhaite parser une chaine comme (mot\\((mot,)+\\),)+
Et je souhaite recuperer juste ce qui est entre les parenthèses en gras, et il peux y en avoir plusieurs, car vous aurez remarquez le + à la fin.
Et je ne peux pas faire de split sur la virgule.
Merci![]()
Partager