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

Python Discussion :

Recherche de date dans string


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 147
    Par défaut Recherche de date dans string
    Bonjour,

    Je cherche un moyen d'extraire une date qui n'a pas une forme définie ni une place définie dans une chaîne string

    par exemple 3 lignes ci-dessous
    16-08-2007PAS DE SYNCHRORemise en service massive 04-07-2007
    20-05-2005 –essai mauvais - 25-07-2005 - pas de synchro
    Blabla20/01/04 suite
    Ici et encore 20/03/2008
    La notation de la date est toujours française jour mois an

    Je sais je vais me faire tirer dessus à bout portant, mais je ne comprends pas comment utiliser la bibliotheque date ou datetime notamment la fonction strptime

    Si j’écris
    Date_correcte=datetime.strptime(« 16-08-2007PAS DE SYNCHRORemise en service massive 04-07-2007 »,%d %- %m %- %Y)
    Cela doit fonctionner ??
    Strptime va me retourner un état valide s’il trouve une combinaison? L’objet se débrouille tout seul ?

    Si a un moment j’ai un état valide j’aurai trouvé un format de date correct.
    Je saurais ensuite comment enlever la chaîne de caractere représentant la date

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    328
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 328
    Par défaut
    Salut,

    Je suis pas un expert mais...

    D'après moi :

    Tu ne peux pas utilise datetime dans cette situation. Utilise plutôt une fonction de recherche dans le texte comme Find() :

    1. Tu recherches dans ce texte les caractères "-"
    2. Quand tu en trouves un, tu vérifies qu'il y a 2 chiffres avant, 2 chiffres après, un tiret encore après puis enfin 4 chiffres. Comme cela, tu repères la date.
    3. Ensuite tu cherches dans le reste du texte avec la même méthode.

    Voilà comme j'aurais fait. Mais bon, y'a sûrement mieux...

    A +

  3. #3
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 119
    Par défaut
    Bonjour,

    il me semble que c'est un bon cas d'utilisation des expressions régulières, par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    re.findall("\d\d-\d\d-\d{4}",s)
    et si la forme varie, il suffit de complexifier un peu l'expression. strptime ne reconnait qu'une date (qui est d'ailleurs compilée en expression réguliere, voir le code _strptime.py).

  4. #4
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    +1 pour Fructidor.

    Pour avoir en même temps '16-08-2007' et '20/03/2008' dans l'exemple donné, il suffit de permettre aux 2 séparateurs '-' et '/' d'être recherchés par '[-/]'.

    Pour avoir en même temps les années comme '2004' et '04', il suffit d'admettre les 2 possibilités par '\d{2,4}':

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    re.findall("\d\d[-/]\d\d[-/]\d{2,4}",s)
    donne bien toutes les dates avec l'exemple donné mis dans la variable s:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ['16-08-2007', '04-07-2007', '20-05-2005', '25-07-2005', '20/01/04', '20/03/2008']
    Tyrtamos

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 147
    Par défaut expression régulière suite
    bonjour,

    j'ai commencé à regarder la réponse.
    d'abord merci à tyrtamos pour ce précieux conseil.

    je n'y sera pas arrivé tout seul c'est sur

    bon j'ai une précision à regarder
    avant de programmer une fonction dédié sur le formatage des dates

    >>> import re
    >>> Liste_date_valide=re.findall("\d{1,2}\d[-/]\d{1,2}\d[-/]\d{2,4}",ligne)
    >>> print Liste_date_valide
    ['16-08-2007', '04-07-2007']
    >>> ligne="16-08-2007PAS DE SYNCHRORemise en service massive 4-7-2007"
    >>> Liste_date_valide=re.findall("\d{1,2}\d[-/]\d{1,2}\d[-/]\d{2,4}",ligne)
    >>> print Liste_date_valide
    ['16-08-2007']
    >>> ligne="16-08-2007PAS DE SYNCHRORemise en service massive 04-07-07"
    >>> Liste_date_valide=re.findall("\d{1,2}\d[-/]\d{1,2}\d[-/]\d{2,4}",ligne)
    >>> print Liste_date_valide
    ['16-08-2007', '04-07-07']
    >>> ligne="16-08-2007PAS DE SYNCHRORemise en service massive 4-7-2007"
    >>> ligne="16-08-2007PAS DE SYNCHRORemise en service massive 4-07-2007"
    >>> Liste_date_valide=re.findall("\d{1,2}\d[-/]\d{1,2}\d[-/]\d{2,4}",ligne)
    >>> print Liste_date_valide
    ['16-08-2007']
    >>> ligne="16-08-2007PAS DE SYNCHRORemise en service massive 04-07-07"
    >>> Liste_date_valide=re.findall("\d{1,2}\d[-/]\d{1,2}\d[-/]\d{2,4}",ligne)
    >>> print Liste_date_valide
    ['16-08-2007', '04-07-07']
    >>> ligne="16-08-2007PAS DE SYNCHRORemise en service massive 04-7-07"
    >>> Liste_date_valide=re.findall("\d{1,2}\d[-/]\d{1,2}\d[-/]\d{2,4}",ligne)

    >>> print Liste_date_valide
    ['16-08-2007']
    regarder le résultat de mes essais
    je voudrai étendre le champ de recherche mais j'ai une anomalie


    exposé de ma question complémentaire
    pourquoi une date du type 1-4-2007 n'est pas reconnu par les formats passés?

    merci d'vance pour votre patience

  6. #6
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Citation Envoyé par turboiii Voir le message
    pourquoi une date du type 1-4-2007 n'est pas reconnu par les formats passés?
    Avec acceptation des dates telles que 1-4-2007, la formule devient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    re.findall("\d{1,2}[-/]\d{1,2}[-/]\d{2,4}",s)
    Tu avais bien ajouté le "{1,2}", mais tu as oublié de retirer le 2ème "\d" en trop, ce qui fait qu'une "date" comme "111/111/2007" aurait pu être sélectionnée...

    Maintenant, tu recherches une sous-chaîne telle que:

    \d{1,2} = 1 ou 2 chiffre(s)
    [-/] = suivi de "-" ou de "/"
    \d{1,2} = suivi d'1 ou de 2 chiffre(s)
    [-/] = suivi de "-" ou de "/"
    \d{2,4} = suivi de 2 ou de 4 chiffre(s)

    Tyrtamos

Discussions similaires

  1. [XL-2003] Recherche de date dans une liste
    Par setepenre dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 27/01/2011, 10h06
  2. Requete de Recherche de date dans Domaine = Pb
    Par papy75 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 07/03/2008, 02h38
  3. [RegEx] recherche de parenthèse dans string ereg?
    Par adr22 dans le forum Langage
    Réponses: 1
    Dernier message: 06/11/2007, 09h45
  4. [VBA-E]Recherche de date dans plusieurs feuilles
    Par atypik dans le forum Macros et VBA Excel
    Réponses: 15
    Dernier message: 05/04/2006, 20h36
  5. Réponses: 3
    Dernier message: 06/03/2006, 07h31

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