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 :

[RegExp] Adapter une regexp Perl vers du Java


Sujet :

Collection et Stream Java

  1. #1
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut [RegExp] Adapter une regexp Perl vers du Java
    Hello

    Auparavant, je scannais une banque de données avec un script Perl pour en retirer une information. Voici le code :
    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
     
    #!/usr/bin/perl -w
     
    use strict;
     
    my $s = "Semaphorin 3F";
    open FILE, "< /homegldavid/Snippets/Bases/GeneOntology/gene_association.goa_human" or die "$!\n";
    while(<FILE>){
    	if(/\t$s/){
    		my $current = $_;
    		if($current =~ /(GO:[0-9]+)/){
    			print "$1\n";
    		}
    	}
    }
    close FILE;
    Simple, non ?
    Maintenant, je veux faire l'équivalent en Java :
    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
     
    import java.io.*;
    import java.util.regex.*;
     
    public class SearchOntology {
     
    	public static void main(String[] args) throws FileNotFoundException, IOException {
     
    		String prot = new String("Semaphorin 3F");
    		File f = new File("/home/dbourgais/Snippets/Bases/GeneOntology/gene_association.goa_human");
    		BufferedReader bf = new BufferedReader(new FileReader(f));
    		String current;
    		while((current=bf.readLine())!=null){
    			if(current.contains(prot)){
    				System.out.println(""+current);
    				String s = current;
    				Pattern p = Pattern.compile("(GO:[0-9]+)");
    				Matcher m = p.matcher(s);
    				if(m.matches()){
    					System.out.println(""+m.group());
    				}
    			}
    		}
     
    	}
     
    }
    Mais apparemment, il ne me retourne pas le résultat de ma recherche.
    Me suis-je trompé avec les appels vers Matcher ?

    Merci d'avance de vos infos.

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  2. #2
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Ok, j'ai résolu le problème. Il fallait plutôt utiliser la méthode Maatcher.find :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    p = Pattern.compile("GO:\\d+");
    m = p.matcher(current);
    if(m.find()){
    	System.out.println(m.group());
    }
    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

  3. #3
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    La méthode matches() ne renvoit true QUE si la chaine entière correspond au pattern (ce qui ne semble pas être ton cas) :
    Attempts to match the entire input sequence against the pattern.
    Si tu veux rechercher un sous chaine selon son pattern il faut utiliser find() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
                Matcher m = p.matcher(s);
                if (m.find()){
                   System.out.println(""+m.group());
                }
    Et eventuellement remplacé le if par un while si il y a plusieurs sous-chaine à rechercher

    a++

    [edit] Bon ben tu as trouvé tout seul

  4. #4
    Expert confirmé
    Avatar de GLDavid
    Homme Profil pro
    Service Delivery Manager
    Inscrit en
    Janvier 2003
    Messages
    2 852
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Service Delivery Manager
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Janvier 2003
    Messages : 2 852
    Points : 4 759
    Points
    4 759
    Par défaut
    Citation Envoyé par adiGuba
    Bon ben tu as trouvé tout seul
    Tu vois, je m'améliore !

    @++
    GLDavid
    Consultez la FAQ Perl ainsi que mes cours de Perl.
    N'oubliez pas les balises code ni le tag

    Je ne répond à aucune question technique par MP.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. une table à transformer vers xml java
    Par hichcasa dans le forum Services Web
    Réponses: 4
    Dernier message: 30/11/2008, 12h31
  2. [regex]Passage d'une regexp Ruby vers Java
    Par GLDavid dans le forum Collection et Stream
    Réponses: 6
    Dernier message: 11/09/2007, 09h37
  3. Construction d'une regexp : unmatched () in regexp
    Par linou dans le forum Langage
    Réponses: 7
    Dernier message: 27/01/2006, 11h34
  4. [Regex]Match d'une regexp avec une chaîne avec caractères spéciaux
    Par gdawirs dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 25/11/2005, 12h24
  5. [Regexp] Obtenir une regexp à partir du texte ?
    Par Alec6 dans le forum Langage
    Réponses: 1
    Dernier message: 12/09/2005, 16h40

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