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 :

Python Expression réguliere


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 59
    Par défaut Python Expression réguliere
    Bonjour,

    J'ai un fichier ayant comme contenu : "Paris a 50 millions
    mon script lit un script python, avec une expression réguliere, il récupère la valeur 50.

    voici l'expression :

    Result = re.findall('Paris a ([0-9]+) millions', line)

    en faisant un print du result, le résultat renvoyé est bien le ['50'].

    je veux qu'elle me renvoie uniquement la valeur 50. comment supprimer le " [' ']" avec l'expression régulière ?


    Ma seconde question est la suivante :

    j'ai l'expression suitante : " 1800 km de long "
    Comment récupérer le "km" uniquement avec une expression régulière ?
    J'ai essayé ceci mais le résultat n'est pas concluant :

    kilometrage = re.findall('(^[0-9]+)(.*?) de long', line)

    merci de votre comprehension !



    Cordialement,

    PythonNovices

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    180
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2011
    Messages : 180
    Par défaut
    Bonjour

    Il y a une petite confusion. re.findall renvoie une liste. Donc quand vous faites un print. Python affiche une représentation de la liste et non le contenu du premier élément.
    Essayez Dans la deuxième expression régulière, vous définissez deux groupes (^[0-9]+) et (.*?)
    Donc re.findall va renvoyer tout ce qui matche.

    Ceci est déjà mieux :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    kilometrage = re.findall('([0-9]+.*?) de long', line)
    Evidemment, vous devez encore l'adapter à votre code car '45 kilogrammes' matchera aussi et je ne sais pas si c'est ce que vous voulez.

    Monsieur et madame Huxe ont une fille...

  3. #3
    Membre actif
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 59
    Par défaut
    Merci chticricri !!!!!

    Mon premier point est résolu. Par contre pour le deuxieme point pas encore.

    En fait dans mon fichier, j'ai plusieurs lignes comme :

    de 300 km de long
    de 20 cm de long
    de 99 dm de long
    de 105 km de long
    de 1204 hm de long

    avec l'expression suivante : kilometrage = re.findall('de ([0-9]+.*?) de long', line)

    Je veux exclure la valeur et récupérer uniquement l'unité de mesure. Exemple, récupérer uniquement le km ou le cm, ou dm, ou bien le hm.

    merci de votre aide !

    Cordialement,

    PythonNovices

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 060
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 060
    Par défaut
    findall n'est pas la méthode adaptée à la demande du problème, voir plutôt du côté de match ou search, exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    import re
     
    chaine = 'Paris a 50 millions'
     
     
    res = re.search('Paris a (\d{2}) millions', chaine)
    if res:
        print(res.group(1))

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 715
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 715
    Par défaut
    Salut,

    Un truc comme:
    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
    >>> import re
    >>> data = '''de 300 km de long
    ... de 20 cm de long
    ... de 99 dm de long
    ... de 105 km de long
    ... de 1204 hm de long
    ... '''
    >>> pattern = r'de (\d+) ([kdch]m) de long'
    >>> for c, u in re.findall(pattern, data):
    ...     print('d:', c, 'unité:', u)
    ...
    d: 300 unité: km
    d: 20 unité: cm
    d: 99 unité: dm
    d: 105 unité: km
    d: 1204 unité: hm
    >>>
    récupère "valeur" et "unité de mesure".
    Après vous en faites ce que vous voulez.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  6. #6
    Membre actif
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Décembre 2014
    Messages : 59
    Par défaut
    Bonsoir,

    Merci pour les indicateurs. En fait dans cette phrase : "de 1805km de route". Je veux recuperer uniquement le "km" avec une expression reguliere. Sachant que l'unite "km" peut changer et toujours concatene avec la valeur qui peut changer egalement.

    merci de votre aide.

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

Discussions similaires

  1. [Debutant] Expression réguliere
    Par grizzz dans le forum Collection et Stream
    Réponses: 10
    Dernier message: 17/08/2007, 16h14
  2. expression réguliere
    Par htristra dans le forum C
    Réponses: 11
    Dernier message: 06/09/2005, 22h33
  3. expression réguliere en c++
    Par alambics dans le forum MFC
    Réponses: 9
    Dernier message: 10/03/2004, 20h19
  4. expression réguliere
    Par alambics dans le forum Langage SQL
    Réponses: 2
    Dernier message: 10/03/2004, 13h52

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