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 :

Probleme algo ou regex en java


Sujet :

Collection et Stream Java

  1. #1
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 125
    Par défaut Probleme algo ou regex en java
    Bonsoir,

    Y'a t-il quelcun qui peux m'aider a resoudre un probleme algorithmique?
    Je dois trouver un regex pour les fichiers formates de cette maniere:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    --->    avinashs gnx522 xls37:41.0-13279 (v2007.05) (gnx333/1717 23931), start Wed 2/27 14:03
    je cherche a afficher les noms de villes qui sont constituées de 3 caracteres ex: gnx et non pas afficher les noms ex: MOREAU de perssonnes en sachant que les noms de personnes peuvent etre differents

    Car il y a quand meme parmis ces fichiers des fichiers formates de la maniere suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       --->    Mickael MOREAU GNB300995 GNB300995-03932 (v2007.05) (gnx333/1717 69439), start Wed 7/25 15:32
    existet -il un moyen regex pour ne pas afficher cette ligne ou bien prendre que gnx dans cette linge...?

    Car en ce moment pour mon graphe tjrs dans le meme endroit je recupere les villes 3 caracteres et parmis ces villes il y a par exemple ce Nom: MOREAU que je ne voudrai pas...

    Chapeau pour celui qui trouvera.

    Merci en avance.

  2. #2
    vic
    vic est déconnecté
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Par défaut
    Salut,

    apparemment les lignes de villes sont composées de 10 "mots" (= chaînes séparées par un espace), et les lignes de personnes en ont 11. Ne serait-il pas plus simple de tout simplement vérifier le nombre de mots ? (ou le nombre d'espaces)

    Sinon en regexp pour faire un match sur une chaîne de 3 lettres il suffit de faire
    Si tu veux une séquence de 3 lettres suivie de chiffres, c'est un peu plus compliqué :
    Exemple pour ton cas (j'ai supposé que les "----->" ne font pas partie des lignes à traiter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Pattern p = Pattern.compile( "^\\w* ([a-zA-Z]{3}(?=\\d))" );
    Matcher matcher = p.matcher( ligne_à_traiter );
    if(matcher.find()) {
        System.out.println(matcher.group(1));
    }

  3. #3
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 125
    Par défaut
    Très bonne idée ,

    mais il faut que je recupere dans la premier ligne gnx et dans la deuxieme GNB (c'est toute de suite apres le MOREAU), desole je me sui mal exprimer...

  4. #4
    vic
    vic est déconnecté
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Par défaut
    Dans ce cas il suffit de compter le 9ème "mot" en partant de la fin, et de prendre les 3 premières lettres, et voilà

  5. #5
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 125
    Par défaut
    Salut,

    Je ne suis pas une as des expressions régulières...

    J'ai fait ca :

    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
     
     
    private static int parse_test(String c) {
     		int h =0; 			
     		Pattern pattern;
     		Matcher m3;
     		String espaces = "([\t| ]+)";
     		String regexp = "(--->"+espaces+"^\\w* ([a-zA-Z]{3}(?=\\d))"+espaces+")";
     		pattern = Pattern.compile(regexp);
     		m3 = pattern.matcher(c);	
     
     		if(m3.find()) {
     
     
     	 	    System.out.println(m3.group(1));
     
     		}
     		return h;    		
     	}
    Voilà je galère donc si quelqu'un peut m'aider ! ça serait super sympa !

    merci

  6. #6
    Membre confirmé
    Inscrit en
    Mai 2006
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 125
    Par défaut
    Citation Envoyé par ox@na Voir le message
    Salut,

    Je ne suis pas une as des expressions régulières...

    J'ai fait ca :

    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
     
    private static String parse_ville(String c) {
     		String h = null; 			
     		Pattern pattern;
     		Matcher m3;
     		String espaces = "([\t| ]+)";
     		String regexp = "((--->)"+espaces+"(^\\w* ([a-zA-Z]{3}(?=\\d)))"+espaces+")";
     		pattern = Pattern.compile(regexp); 		
     		m3 = pattern.matcher(c);	
     
     		Pattern p4; 		
     		Matcher m4; 
     
     		if(m3.find()) {		
     
     			p4 = Pattern.compile("[a-zA-Z]{3}");
     
     	 			m4 = p4.matcher(m3.group());
     
     	 				System.out.println(m3.group());	
     
     			if(m4.find()) {
     				try {
     
     					h = (m4.group()); 
     					System.out.println(m4.group());	
     
     				} catch(NumberFormatException e) {
     					e.printStackTrace();
     					h = null; 					
     					} 				
     			}		
     
     		else {
     
    				System.out.println("bad regexp");
    			} 			
     
     		} else {
     
    			System.out.println("INTERNAL ERROR : check regexp");
    		}
     		return h;    		
     	}
    Voilà je galère donc si quelqu'un peut m'aider ! ça serait super sympa !

    merci

  7. #7
    vic
    vic est déconnecté
    Membre chevronné

    Profil pro
    Inscrit en
    Août 2002
    Messages
    431
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2002
    Messages : 431
    Par défaut
    OK, essaie ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    String parseVille( String ligne ) {
        Pattern p = Pattern.compile( "--->\\s+(\\w+ ){1,2}([a-zA-Z]{3}(?=\\d))" );
        Matcher matcher = p.matcher( ligne );
        if( matcher.find() ) {
            return matcher.group( 2 );
        }
        return null;
    }

Discussions similaires

  1. Probleme de script regex !!!
    Par calimero642 dans le forum Langage
    Réponses: 22
    Dernier message: 28/03/2006, 15h18
  2. Problème pour l'installation de Java 1.5 sous Ubuntu
    Par Premium dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 03/03/2006, 10h01
  3. [DOM] Probleme de parsing Xml en java
    Par bolivari dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 25/01/2006, 19h42
  4. Problem avec un REGEX
    Par Death83 dans le forum Langage
    Réponses: 1
    Dernier message: 23/12/2005, 22h36
  5. Probleme d'encode XML et java
    Par ujoodha dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 25/10/2005, 09h24

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