Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 5 sur 5
  1. #1
    Membre du Club
    Inscrit en
    mars 2006
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 184
    Points : 48
    Points
    48

    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 Confirmé Sénior
    Avatar de tyrtamos
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2007
    Messages : 2 290
    Points : 4 129
    Points
    4 129

    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 :
    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 []
    Ne rien ranger permet d'observer la loi universelle d'entropie: l'inévitable convergence vers le chaos...
    Mes recettes python: http://www.jpvweb.com

  3. #3
    Membre du Club
    Inscrit en
    mars 2006
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 184
    Points : 48
    Points
    48

    Par défaut

    ok merci tyrtamos

    Code :
    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 Confirmé Sénior
    Avatar de tyrtamos
    Profil pro
    Inscrit en
    décembre 2007
    Messages
    2 290
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2007
    Messages : 2 290
    Points : 4 129
    Points
    4 129

    Par défaut

    Comme ça?

    Code :
    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
    Ne rien ranger permet d'observer la loi universelle d'entropie: l'inévitable convergence vers le chaos...
    Mes recettes python: http://www.jpvweb.com

  5. #5
    Membre du Club
    Inscrit en
    mars 2006
    Messages
    184
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 184
    Points : 48
    Points
    48

    Par défaut

    re,

    trop fort

    merci pour l'aide

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

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •