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

  1. #1
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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
    Points : 61
    Points
    61
    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 averti
    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
    Points : 321
    Points
    321
    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 du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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
    Points : 61
    Points
    61
    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 éminent
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    3 823
    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 : 3 823
    Points : 7 119
    Points
    7 119
    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))
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  5. #5
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    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 du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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
    Points : 61
    Points
    61
    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.

  7. #7
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par PythonNovices Voir le message
    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.
    Pourquoi ne pas essayer de mettre au point cela vous même?
    Lancer la console Python, tester différents regexp,...
    C'est la meilleure façon pour comprendre comment çà fonctionne et s'assurer qu'on obtient bien ce qu'on veut.

    On peut essayer de vous aider si vous ne vous en sortez pas mais seul vous savez ce que "vous voulez".
    De plus faire ce genre d'exercice à votre place n'a pas grand intérêt.

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

  8. #8
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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
    Points : 61
    Points
    61
    Par défaut
    Vous n'êtes pas obligé de répondre Mr wiztricks, vous le Modérateur ou soit disant connaisseur.

  9. #9
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 287
    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 287
    Points : 36 776
    Points
    36 776
    Par défaut
    Citation Envoyé par PythonNovices Voir le message
    Vous n'êtes pas obligé de répondre Mr wiztricks, vous le Modérateur ou soit disant connaisseur.
    Je vous rappelle seulement que ces forums ont des règles.
    L'une d'entre elle dit:

    Vous êtes les bienvenus ici pour vous former.

    Vous former, cela veut dire lire les cours et tutoriels :
    http://www.developpez.com/cours/

    et éventuellement poser vos questions en français correct si vous avez besoin d'aide, dans un seul forum, et dans le respect des règles du forum.

    Nous ne sommes pas là pour faire vos exercices.
    Entendez par là que nous serons bien évidemment tout à fait d'accord pour vous aider à résoudre votre problème, pour autant que vous fassiez vous-même des efforts.
    Postez votre question, mais proposez également un début de solution, un bout de code, etc. En aucun cas, nous ne ferons le travail à votre place.

    Merci de votre compréhension.

    PS : Merci aux étudiants qui participent à developpez.com en écrivant des tutoriels ou en répondant aux messages des autres sur des sujets qu'ils maîtrisent bien.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  10. #10
    Membre du Club
    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2014
    Messages
    59
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    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
    Points : 61
    Points
    61
    Par défaut
    unitile de me le rappeler Mr Mr wiztricks, je le sais trop bien même.
    Mais Sachez que vous Monsieur Modérateur, vous n'avez pas le monopole du savoir.

+ 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