p
u
b
l
i
c
i
t
é
publicité
  1. #1
    Membre du Club
    Inscrit en
    mars 2006
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 202
    Points : 52
    Points
    52

    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 670
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : décembre 2007
    Messages : 2 670
    Points : 4 957
    Points
    4 957
    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 du Club
    Inscrit en
    mars 2006
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 202
    Points : 52
    Points
    52

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

    Informations forums :
    Inscription : décembre 2007
    Messages : 2 670
    Points : 4 957
    Points
    4 957
    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 du Club
    Inscrit en
    mars 2006
    Messages
    202
    Détails du profil
    Informations forums :
    Inscription : mars 2006
    Messages : 202
    Points : 52
    Points
    52

    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
    Réponses: 4
    Dernier message: 01/07/2014, 22h26
  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, 19h07
  3. Isoler une chaine de caractere
    Par VooDooNet dans le forum Syntaxe
    Réponses: 2
    Dernier message: 20/09/2006, 17h58
  4. REGEXP : recupérer une chaine entre deux autres chaines
    Par dude666 dans le forum java.util
    Réponses: 2
    Dernier message: 31/08/2006, 09h23
  5. Réponses: 4
    Dernier message: 29/05/2006, 15h27

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