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 :

sous-chaine avec re


Sujet :

Python

  1. #1
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut sous-chaine avec re
    Bonsoir,
    Pour m'amuser, je cherche à parser un bulletin de paie.
    Je me retrouve avec une chaîne de caractère dont je voudrais extraire certains éléments.
    Par exemple, je souhaite récupérer la valeur 123,18 et je bloque depuis un moment.
    Je sais bien que c'est très simple mais comme je touche à re une fois par an, j'oublie au fur et à mesure.
    Voici ce par quoi j'ai terminé mais qui ne me satisfait pas totalement. Je sais que je peux récupérer les indices de chaîne mais bof...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    chaine = "•011100NET A PAYER AVANT IMPOT SUR LE REVENU•    123,18 IMPOT SUR LE REVENU"
    #regex = re.compile('^REVENU• .*558000IMPOT$')
    gauche = '^.*REVENU•'
    droite = 'IMPOT.*$'
    regex = re.compile(gauche+"[\d\s]*"+droite)
    print(regex.findall(chaine))
    res = re.findall(gauche+"[\d\s]*"+droite,chaine)
    print(res)
    Plusieurs façons de procéder sans doute ?

  2. #2
    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,

    Peut-être comme ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    ch = "nghghikg123,456zqo,ceom,c789,321hcshiskch"
     
    motif = r"[0-9]+,[0-9]+"
    regex = re.compile(motif)
     
    results = regex.findall(ch)
     
    if results:
        print("Il y a", len(results), "résultat:" if len(results)==1 else "resultats")
        for result in results:
            print(result)
    else:
        print("pas trouvé")
    Ce qui affiche ici:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Il y a 2 résultats:
    123,456
    789,321

  3. #3
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Merci tyrtamos.
    Je ne sais pas si cela va répondre à ma question, il va falloir que j'essaie de façon approfondie.
    En effet, comme je voudrais récupérer pas mal de données, je préférais les repérer entre mots-clés.

  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
    Rien n'empêche de mettre les mots-clés dans le motif, mais il faudra peut-être préciser dans le motif que tu veux isoler le nombre (parenthèses ?). Précise un peu mieux avec un exemple.
    Il faudrait aussi dire si une même chaîne peut avoir ou non plusieurs nombres à trouver.

  5. #5
    Membre Expert
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 617
    Par défaut
    Bon, je me suis débrouillé avec cela, merci. C'est un peu bancale car fonction du nombre de lignes présentes sur le bulletin de paie.
    En fait, je parse le pdf du bulletin de paie et j'extraie le salire brut auquel je retranche l'impot. Suivant les mois, le nombre de lignes varie et c'est pour cela que je voulais bien identifier les montants pour savoir à quelle ligne ils correspondaient.

Discussions similaires

  1. Extraire une sous-chaine avec une REGEXP
    Par EnRadeSurEclipse dans le forum Requêtes
    Réponses: 4
    Dernier message: 30/03/2011, 15h47
  2. Réponses: 3
    Dernier message: 23/09/2009, 10h45
  3. Obtenir une sous-chaine avec Pos
    Par mlepretre dans le forum Débuter
    Réponses: 6
    Dernier message: 25/09/2008, 11h13
  4. sous chaine avec MFC
    Par k_boy dans le forum MFC
    Réponses: 2
    Dernier message: 02/10/2007, 17h53
  5. [sous-chaine] Avec strpos ou substring ??
    Par terziann dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 17/07/2003, 15h28

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