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][Java] Récuperer une liste de mot d'un texte


Sujet :

Collection et Stream Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 27
    Points : 14
    Points
    14
    Par défaut [Regex][Java] Récuperer une liste de mot d'un texte
    Bonjour à tous,

    J’ai ce texte en entrée :

    xxxxxxxxxxABCyyyyyyyyyyyyyyy ABCzzzzzzzzzzzzzzzzzzzABCuuuuuuuuuuuuuuuuuuuuuuuuuuuu vvvvvvvvvvvvvvvvvvvvvvvvvvvvv
    wwwwwwwwwwwwwwwwwwwwwABCABCooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
    ooooooooooo ABC jjjjjjjj

    Chaque paquet de lettre en minuscule peut correspondre à n’importe quoi (sauf ABC bien entendu).
    Par exemple, xxxxxxxxxx peut valoir « tototototo » ou « nimportekoi »

    Je cherche à obtenir en Java la liste de String ci-dessous :

    ABCyyyyyyyyyyyyyyy
    ABCzzzzzzzzzzzzzzzzzzz
    ABCuuuuuuuuuuuuuuuuuuuuuuuuuuuu
    ABC
    ABCoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo
    ABC


    Pensez-vous que cela est possible avec une Regex ?
    J'ai essayé le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Pattern linkPattern = Pattern.compile("(.*)(ABC(.*))+");
    Matcher m = linkPattern.matcher(text);
    La fonction matches() me renvoie bien "true", mais je n'arrive pas à récupérer les résultats via la méthode group()

    Pouvez-vous m'aider ?

  2. #2
    Membre éclairé
    Homme Profil pro
    NoOb
    Inscrit en
    Mai 2007
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NoOb

    Informations forums :
    Inscription : Mai 2007
    Messages : 554
    Points : 852
    Points
    852
    Par défaut
    Bonjour,

    Regarde du côté de la fonction split.

    taString.split("ABC"); te renverrait quelque chose comme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    xxxxxxxxxxxx
    yyyyyyyyyyyyyyy
    zzzzzzzzzzzzzzzzzzz
    uuuuuuuuuuuuuuuuuuuuuuuuuuuu
     
    oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo

  3. #3
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Merci de ta réponse.

    Je ne pense pas que split() puisse fonctionner ici.

    Voila le résultat de maString.split:

    xxxxxxxxxx <= cette chaine ne suffixe pas ABC, je ne veux pas qu'elle remonte
    yyyyyyyyyyyyyyy <= espace final non désiré (bon à la rigueur je peux faire un trim())
    zzzzzzzzzzzzzzzzzzz <= OK
    uuuuuuuuuuuuuuuuuuuuuuuuuuuu vvvvvvvvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwww
    <= je ne veux récupérer ni les v, ni les w
    oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo <= OK
    jjjjjjjj <= je ne veux pas ces j, cette chaine ne suffixe pas ABC


    Je pense vraiment qu'une expression régulière peut résoudre le problème, mais je n'arrive pas à la trouver.

  4. #4
    Membre éclairé
    Homme Profil pro
    NoOb
    Inscrit en
    Mai 2007
    Messages
    554
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : NoOb

    Informations forums :
    Inscription : Mai 2007
    Messages : 554
    Points : 852
    Points
    852
    Par défaut
    xxxxxxxxxx <= cette chaine ne suffixe pas ABC, je ne veux pas qu'elle remonte

    tu peux virer la première au pire.

    yyyyyyyyyyyyyyy <= espace final non désiré (bon à la rigueur je peux faire un trim())

    ok donc.


    zzzzzzzzzzzzzzzzzzz <= OK


    uuuuuuuuuuuuuuuuuuuuuuuuuuuu vvvvvvvvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwww
    <= je ne veux récupérer ni les v, ni les w

    tri dans les résultats.

    oooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo <= OK


    jjjjjjjj <= je ne veux pas ces j, cette chaine ne suffixe pas ABC

    La chaîne suffixe ABC, mais il y a un espace devant, tu peux le tester.

    C'est vrai que tu veux du spécifique, les tests pourraient devenir lourd.
    Mais sur la même base, ton expression régulière magique va être bien lourde aussi :p

    Sinon tu as réussi à récupérer les résultats de ton matches?

  5. #5
    Membre à l'essai
    Inscrit en
    Mars 2006
    Messages
    27
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 27
    Points : 14
    Points
    14
    Par défaut
    Merci encore pour ta réponse :-)

    Pour essayer de récupérer les résultats, je fais ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Pattern linkPattern = Pattern.compile("(.*)(ABC(.*))+");
    Matcher m = linkPattern.matcher(text);
     
    while (m.find()) {
         System.out.println("Word = " + text.substring(m.start(), m.end()));
    }
    Voila le résultat, complêtement faux :

    Word = xxxxxxxxxxABCyyyyyyyyyyyyyyy ABCzzzzzzzzzzzzzzzzzzzABCuuuuuuuuuuuuuuuuuuuuuuuuuuuu vvvvvvvvvvvvvvvvvvvvvvvvvvvvvwwwwwwwwwwwwwwwwwwwwwABCABCoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo ABC jjjjjjjj



    Je vais peut-être essayer de faire plusieurs split() :
    Un premier sur la chaine ABC, puis sur chaque résultat, un second split() sur le caractère " ".

    Tu as raison, c'est assez spécifique, et l'avantage non-négligeable de ta solution, c'est qu'elle fonctionne ^^

    Ce que j'ai du mal à comprendre, c'est pourquoi l'expression régulière (.*)(ABC(.*))+ ne fonctionne pas...
    j'utilise peut être mal les Regexp sous java...

  6. #6
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2007
    Messages
    60
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2007
    Messages : 60
    Points : 57
    Points
    57
    Par défaut
    J'ai essayé avec StringTokenizer, il reste un problème c'est quand il y a plusieurs ABC qui se suivent.
    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
    24
    25
    26
    27
    28
    29
    public static void main(String[] args) {
    	String s="xxxxxxxxxxABCyyyyyyyyyyyyyyy ABCzzzzzzzzzzzzzzzzzzzABCuuuuuuuuuuuuuuuuuuuuuuuuuuuu vvvvvvvvvvvvvvvvvvvvvvvvvvvvv"
    			+"wwwwwwwwwwwwwwwwwwwwwABCABCooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo"
    			+"ooooooooooo ABC jjjjjjjj";
     
    	StringTokenizer st=new StringTokenizer(s,"ABC");
     
     
    	while(true)
    	{
    		try{
    			String mot=st.nextToken();
     
    			if(mot.startsWith(" "))
    			{
    				System.out.println("ABC");
    				continue;
    			}
    			if(s.startsWith(mot))
    				continue;
     
    			System.out.println("ABC"+mot.replace("v", "").replace("w", ""));
    		}catch(NoSuchElementException e)
    		{
    			System.out.println("END");
    			break;
    		}
    	}
    }
    Résultat Obtenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ABCyyyyyyyyyyyyyyy 
    ABCzzzzzzzzzzzzzzzzzzz
    ABCuuuuuuuuuuuuuuuuuuuuuuuuuuuu 
    ABCoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo 
    ABC
    END

Discussions similaires

  1. Struts JSP Récuper une liste JSP vers Java
    Par Anthone dans le forum Struts 1
    Réponses: 0
    Dernier message: 11/10/2012, 10h00
  2. Réponses: 6
    Dernier message: 16/05/2006, 16h17
  3. Charger une liste de mots
    Par barth69 dans le forum C++Builder
    Réponses: 13
    Dernier message: 08/04/2006, 20h56
  4. [Regex][Avis] Méthode de suppression d'une liste de mots
    Par manal dans le forum Collection et Stream
    Réponses: 22
    Dernier message: 15/10/2005, 00h39

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