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, groupes et numérotation


Sujet :

Collection et Stream Java

  1. #1
    Membre éclairé
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Par défaut RegExp, groupes et numérotation
    Bonjour,

    J'ai un souci concernant l'ordre des éléments dans un groupe.

    Soit la chaine "28.09.2009 - 11h25"

    Si je la traite avec la regex
    ([0-9]+)\.([0-9]+)\.([0-9]+)\s*-\s*([0-9]+)h([0-9]+)

    Je récupère bien
    28-09-2009-11-25

    Mais je souhaite prévoir une situation où les éléments de départ sont
    dans un ordre incorrect. Le cas échéant, je souhaite numéroter les données avec une regex du type :
    ([0-9]+)\2\.([0-9]+)\1\.([0-9]+)\s*-\s*([0-9]+)h([0-9]+)

    Cette ligne permettrait de corriger une inversion du type
    09-28-2009-11-25.

    Le problème donc est que ma regex ne restitue aucun résultat lorsque je
    tente de lui préciser un ordre des données.

    Des idées ?
    Merci.

  2. #2
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Je ne sais pas exactement ce que tu veux valider, mais à vue de nez, ta deuxième expression régulière n'est pas correcte par rapport à ce que tu espères valider : pas étonnant donc qu'elle ne te remonte rien.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ([0-9]+)\2\.([0-9]+)\1\.([0-9]+)\s*-\s*([0-9]+)h([0-9]+)
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  3. #3
    Membre éclairé
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Par défaut
    Euh... voyons :

    L'expression suivante me renvoie "09.09.2009 - 08h04" :
    ([0-9]+)\.([0-9]+)\.([0-9]+)\s*-\s*([0-9]+)h([0-9]+)

    Sur cette base là que puis-je faire ?

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    1 252
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2004
    Messages : 1 252
    Par défaut
    Ce problème n'est pas possible.

    Tout simplement parce que les deux champs jour et mois peuvent parfois prendre les mêmes valeurs ou que l'interversion de ces deux valeurs, tout en restant correcte, donne des dates incorrectes.

    08-09-2009 et 09-08-2009 peuvent donner la même date... ou pas. Donc, pas moyen de résoudre.

  5. #5
    Membre éclairé
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Par défaut
    Attendez, je vais préciser le problème...

    J'ai un tableau associant certaines pages html avec certains formats de dates
    que j'aimerais coder sous forme de regexp.

    Je sais à l'avance que les pages A à E ont un format DD.MM.YYYY - hh:mm,
    alors que les pages F à L ont un format MM.DD.YYYY - hh:mm:ss, etc.

    Dingoth : le souci des champs jour et mois avec la même valeur ne se devrait pas se poser car je connais à l'avance chaque type de format et le fichier où il s'applique.

    La question que je me pose c'est est-ce que je peux spécificer cet ordre dans chaque regexp. Comme ca je pourrais choisir où placer chaque élément de la date dans le matcher, et le jour serait toujours dans matcher.group(1), le mois dans matcher.group(2), etc.

    Je crois que non car en cherchant sur internet je ne trouve que des exemples qui exploitent le backreference au moment de l'execution de la regexp - pas dans ce qu'elle stocke - par exemple ([0-9]+)/1 cherche des nombres répétés du type 1212 ou 426426.

    Bon sinon vous avez une autre suggestion peut-être ?

  6. #6
    Rédacteur
    Avatar de CyberChouan
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    2 752
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Janvier 2007
    Messages : 2 752
    Par défaut
    Si il s'agit de parser des dates dont on connait le format à l'avance, pourquoi s'embêter avec des expressions régulières alors que la classe "SimpleDateFormat" est dédiée à ce traitement, et plus simple à manipuler.
    Avant de poster, pensez à regarder la FAQ, les tutoriaux, la Javadoc (de la JRE que vous utilisez) et à faire une recherche
    Je ne réponds pas aux questions techniques par MP: les forums sont faits pour ça
    Mes articles et tutoriaux & Mon blog informatique

  7. #7
    Membre éclairé
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Par défaut
    Merci CyberChouan,

    SimpleDateFormat est effectivement bien plus simple a exploiter.
    Ceci dit, il me reste un petit souci avec une date telle que
    "09.09.2009 - 08h04".

    Figurez-vous que ça passe pas avec le h symbolisant les heures.
    Je veux dire que le motif suivant est innacceptable :
    "dd.MM.yyyy - hhhmm".

    Donc, a part remplacer en amont le 'h' par un ':', savez vous s'il y a un moyen
    de despecialiser le 3eme h dans mon motif ?

  8. #8
    Membre éclairé
    Profil pro
    lkjlgj
    Inscrit en
    Février 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : Angola

    Informations professionnelles :
    Activité : lkjlgj

    Informations forums :
    Inscription : Février 2007
    Messages : 255
    Par défaut
    Ah c'est bon, je viens de trouver, faut mettre des apostrophes au 3eme h.
    Ca donne le motif suivant :
    "dd.MM.yyyy - hh'h'mm"

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

Discussions similaires

  1. [RegEx] Groupes et numérotation
    Par devroot dans le forum Langage
    Réponses: 6
    Dernier message: 08/09/2009, 17h39
  2. numéroter les lignes par groupe
    Par Kurdran dans le forum Langage SQL
    Réponses: 10
    Dernier message: 04/04/2008, 14h08
  3. Comment numéroter des dates dans chaque groupe?
    Par MARCO63 dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 30/01/2008, 03h02
  4. RegExp : optimalité d'un split par rapport à un group
    Par oc_alex86 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 03/12/2007, 20h17
  5. [regexp] comment capturer un groupe
    Par PhiLou421 dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 21/06/2007, 01h01

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