Précédent   Forum du club des développeurs et IT Pro > Autres langages > Python & Zope > Général Python
Général Python Forum d'entraide sur les fondamentaux du langage Python, syntaxe, POO, bibliothèque standard, ...
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 08/01/2013, 11h20   #1
bernards111
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 143
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 143
Points : 30
Points : 30
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
bernards111 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 12h10   #2
tyrtamos
Expert Confirmé
 
Avatar de tyrtamos
 
Inscription : décembre 2007
Messages : 1 771
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 1 771
Points : 3 040
Points : 3 040
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
tyrtamos est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 13h45   #3
bernards111
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 143
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 143
Points : 30
Points : 30
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...
bernards111 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2013, 13h55   #4
tyrtamos
Expert Confirmé
 
Avatar de tyrtamos
 
Inscription : décembre 2007
Messages : 1 771
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 1 771
Points : 3 040
Points : 3 040
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
tyrtamos est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 08/01/2013, 14h50   #5
bernards111
Nouveau Membre du Club
 
Inscription : mars 2006
Messages : 143
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 143
Points : 30
Points : 30
re,

trop fort

merci pour l'aide
bernards111 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 12h36.


 
 
 
 
Partenaires

Hébergement Web