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

Langage Java Discussion :

Problème de REGEX


Sujet :

Langage Java

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 44
    Par défaut Problème de REGEX
    Bonjour à tous,
    Je vous expose mon problème que je retourne dans tous les sens depuis 1h...
    voici mes données en entrée :
    STCo S60056 B1312907
    STCs S33110_1
    stcy 3G N14389
    STCt 22001 B1311636
    stcy 2G 60338
    STCs S20763_1 N23798_3
    Comme vous le constatez, les données en entrée ne sont pas dans un format idéal,
    j'ai essayé plusieurs possibilité sans succès :
    "[0-9]{5}|NA"
    "([0-9]{5}([^N][[^A]))"
    Mais nada, que dal !

    Avez-vous une petite idée du problème ?

    Je vous remercie,

  2. #2
    Membre Expert
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Par défaut
    Salut,

    Je ne suis pas expert en expression régulière, mais ceci semble répondre à ta demande :
    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
    Pattern pattern = Pattern.compile("(?:^|[^\\d])(\\d{5})(?:[^\\d]|$)");
     
    List<String> list = new ArrayList<String>();
    list.add("STCo S60056 B1312907");
    list.add("STCs S33110_1");
    list.add("stcy 3G N14389");
    list.add("STCt 22001 B1311636");
    list.add("stcy 2G 60338");
    list.add("STCs S20763_1 N23798_3");
     
    for (String s : list) {
    	System.out.println(s);
     
    	Matcher matcher = pattern.matcher(s);
     
    	while (matcher.find()) {
    		System.out.print("\t");
    		System.out.println(matcher.group(1));
    	}
    }
    On obtient alors :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    STCo S60056 B1312907
    	60056
    STCs S33110_1
    	33110
    stcy 3G N14389
    	14389
    STCt 22001 B1311636
    	22001
    stcy 2G 60338
    	60338
    STCs S20763_1 N23798_3
    	20763
    	23798

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 44
    Par défaut
    Merci, ça fonctionne à merveille !

    Si tu as un moment, expliquer ta regex, surtout les deux points après le ?, je connaissais le = mais là...

    Bon weekend...

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 44
    Par défaut
    Bonjour,
    En fait je comprends pas ce que vient faire le PIPE au début de la chaine :
    "(?:^|[^\\d])(\\d{5})(?:[^\\d]|$)"

    Ni en fin de chaine d'ailleurs...

    pour ?: j'ai compris que tu ne prenais pas en compte le premier pattern(groupe pur), mais quand tu arrives sur "^" tu veux que ta chaine "commence par" et tu mets un "|" suivi de "ne contient pas de chiffre", pour moi le PIPE veut dire "OU" mais je comprends pas bien la signification :
    "commence par" "OU" "ne contient pas de chiffre"...........

    Un grand merci si tu pouvais m'éclairer.
    Bonne journée.

  5. #5
    Membre Expert
    Avatar de Nesmontou
    Homme Profil pro
    Architecte logiciel
    Inscrit en
    Septembre 2004
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Architecte logiciel
    Secteur : Finance

    Informations forums :
    Inscription : Septembre 2004
    Messages : 1 612
    Par défaut
    Salut,

    C'est vrai que j'ai livré ça à la barbare

    Voici quelques explications :
    • En effet, ?: veut dire que les parenthèses sont non-capturantes
    • Le groupe qui nous intéresse est composé de 5 chiffres, d'où le (\\d{5}) au centre
    • Ce groupe peut être soit en début de chaîne ^ ou précédé par un caractère qui n'est pas un chiffre [^\\d]. Le pipe représente ce OU. Ceci donne (?:^|[^\\d]). La valeur ne nous intéresse pas, donc on utilise des parenthèses non capturantes.
    • Et le groupe de chiffres peut être en fin de chaîne $ ou suivi par un caractère qui n'est pas un chiffre [^\\d]. Ceci donne (?:[^\\d]|$)


    J'espère que ça t'aura aidé.

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    44
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 44
    Par défaut
    Bonsoir,
    Je te remercie, pour les explications claires, j'avais du mal avec les groupes et maintenant c'est plus clair.

    En tout cas, mon problème est résolu.

    Merci beaucoup.

    Thierry.

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

Discussions similaires

  1. [Java] Problème de Regex
    Par spk4ever dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 28/08/2006, 10h51
  2. Problème avec Regex
    Par trihanhcie dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 13/07/2006, 14h50
  3. problème de regex
    Par lanfeust42 dans le forum Langage
    Réponses: 11
    Dernier message: 12/07/2006, 15h32
  4. Problème avec RegEx et une Query string
    Par Erakis dans le forum Langage
    Réponses: 6
    Dernier message: 08/11/2005, 15h48
  5. Problème de Regex ... avec un point
    Par bugalood dans le forum Langage
    Réponses: 2
    Dernier message: 29/05/2005, 10h26

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