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 :

Isoler une chaine entre crochets


Sujet :

Python

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Points : 109
    Points
    109
    Par défaut Isoler une chaine entre crochets
    Bonjour,

    je dispose d'un fichier composé de deux champs
    code nom
    1 [Caryophyllia smithii] and [Pentapora foliacea] sponges with
    2 [Caryophyllia smithii], sponges
    3 Talitrids on the upper shore and strandline (partie)

    mon but est d'obtenir ceci
    code nom
    1 Caryophyllia smithii
    1 Pentapora foliacea
    2 Caryophyllia smithii...

    j'ai essayé d'utiliser les regex
    re.search ("(\[.*\]+)",chaine).group(0) pour isoler les chaines entre crochet mais cela ne prend que la premiere chaine entre crochet .
    De plus cela bug si j'ai une chaine qui n'a pas de crochet ou plus de une chaine entre crochet?
    bref
    merci de votre aide

    j'ai en partie trouver une solution en modifiant mon regex
    re.search ("(\[.*\]+)*",chaine).group(0)

    j'avais oublié une * mis cela garde quand même ce qu'il y a entre chaque chaine ex:[Caryophyllia smithii] and [Pentapora foliacea]
    Pour le reste je continue à chercher, si quelqu un a une idée ou une amélioration je suis preneur

  2. #2
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    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 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Il faut utiliser findall, et modifier le motif. Le motif actuel trouve le 1er '[' et le dernier ']' ce qui ne convient pas à la 1ère ligne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    import re
     
    liste = ["[Caryophyllia smithii] and sponges with [Pentapora foliacea]",
             "[Caryophyllia smithii], sponges",
             "Talitrids on the upper shore and strandline (partie)"
            ]
     
    for i, ligne in enumerate(liste):
        print i, re.findall(r"\[([^\]]*)\]*", ligne)
     
    0 ['Caryophyllia smithii', 'Pentapora foliacea']
    1 ['Caryophyllia smithii']
    2 []
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Points : 109
    Points
    109
    Par défaut
    ok merci tyrtamos

    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
    18
    19
     
    import re
    import xlrd
    # ouverture du fichier Excel 
    wb = xlrd.open_workbook('typoesp.xls')
     
    fichier=[]
     
    # lecture des données dans la première feuille
    sh = wb.sheet_by_name(u'Feuil1')
     
    colonne1 = sh.col_values(0)
    colonne2 = sh.col_values(1)
     
     
     
    for i,rows in enumerate (colonne2):
     
        print i,re.findall(r"\[([^\]]*)\]*",rows)
    je pensais insérer un .split(',') sur colonne2 pour isoler chaque chaine mais j'ai cette erreur 'list' object has no attribute 'split'

    comment je peux arriver à avoir ce resultat?

    1 Caryophyllia smithii
    1 Pentapora foliacea
    2 Caryophyllia smithii...

  4. #4
    Expert éminent
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 461
    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 461
    Points : 9 248
    Points
    9 248
    Billets dans le blog
    6
    Par défaut
    Comme ça?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for i, ligne in enumerate(liste):
        for ch in re.findall(r"\[([^\]]*)\]*", ligne):
            print i+1, ch
    1 Caryophyllia smithii
    1 Pentapora foliacea
    2 Caryophyllia smithii
    Un expert est une personne qui a fait toutes les erreurs qui peuvent être faites, dans un domaine étroit... (Niels Bohr)
    Mes recettes python: http://www.jpvweb.com

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    321
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 321
    Points : 109
    Points
    109
    Par défaut
    re,

    trop fort

    merci pour l'aide

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

Discussions similaires

  1. récuperer une chaine entre deux crochets
    Par anizlewan dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 01/07/2014, 23h26
  2. Supprimer une chaine entre parenthese sur un select
    Par sebg42 dans le forum SQL Procédural
    Réponses: 4
    Dernier message: 26/06/2007, 20h07
  3. Isoler une chaine de caractere
    Par VooDooNet dans le forum Langage
    Réponses: 2
    Dernier message: 20/09/2006, 18h58
  4. REGEXP : recupérer une chaine entre deux autres chaines
    Par dude666 dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 31/08/2006, 10h23
  5. Réponses: 4
    Dernier message: 29/05/2006, 16h27

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