Spécialiste des expressions régulières

Résolu/Fermé
ekdm Messages postés 195 Date d'inscription dimanche 13 mai 2012 Statut Contributeur Dernière intervention 28 août 2012 - 14 juil. 2012 à 23:24
 Utilisateur anonyme - 15 juil. 2012 à 19:39
Salut à tous,

Je voudrais savoir s'il y a un spécialiste des expressions régulières ici (et en particulier sous Python). J'ai des question à lui poser ...

a+


2 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
14 juil. 2012 à 23:53
Bonjour,

Ce n'est pas un site de mise en relation, mais d'entraide.
Donc, pose ta question ici, et ceux qui savent t'aideront.
1
ekdm Messages postés 195 Date d'inscription dimanche 13 mai 2012 Statut Contributeur Dernière intervention 28 août 2012 38
Modifié par ekdm le 15/07/2012 à 02:36
> Bonjour,

Salut,

> Ce n'est pas un site de mise en relation, mais d'entraide.

Oui j'avais bien compris, pas de souci, j'avais quand même précisé: "J'ai des question à lui poser ...", enfin bref, je vais préciser de quoi il s'agit.

> Donc, pose ta question ici, et ceux qui savent t'aideront.

J'ai trouvé la réponse (avec un peu d'aide sur une liste de diffusion), mais je vais quand même relater le contexte (et la solution, si ça peut aider d'autres personnes dans une situation similaire).

J'ai des données récupérés dans une liste de la sorte ['classe, nom prénom note1/barème1 note2/barème2 ...', ...], exemple:

li = ['3eA, Dupont Juliette 3.5/5.0 27.5/30.0 6.5/10.0\n', '3eA, Pop Iggy 2.5/5.0 21.0/30.0 6.0/10.0\n']


Par des expressions régulières je voulais récupérer les données de la sorte:

[['3eA', 'Dupont Juliette', [(3.5, 5.0),  (27.5, 30.0), (6.5, 10.0)]], 
['3eA', 'Pop Iggy', [(2.5, 5.0), (21.0, 30.0), (6.0, 10.0)]]]


Au départ j'avais mis en place le code:

>>> li = ['3eA, Dupont Juliette 3.5/5.0 27.5/30.0 6.5/10.0\n', '3eA, Pop Iggy 2.5/5.0 21.0/30.0 6.0/10.0\n'] 
>>> liste_data = [] 
>>> for parc_data in li: 
...         pat = re.compile("([0-9]+\.[0-9]+).([0-9]+\..)", re.UNICODE) 
...         liste_data.append(pat.findall(parc_data)) 
...


Et les données sont récupérées de la sorte (mais ce n'est pas encore satisfaisant):

>>> liste_data 
[[('3.5', '5.0'), ('27.5', '30.0'), ('6.5', '10.0')], [('2.5', '5.0'), 
('21.0', '30.0'), ('6.0', '10.0')]]


On m'a donné un coup de main (et là c'est bien mieux !):

>>> liste_notes = [] 
>>> pat = re.compile('^(\w+), (\D+) ([0-9]+\..*\/[0-9]+)') 
>>> for parc_data in li: 
...         classe, nom, notes = pat.match(parc_data).groups() 
...         liste_notes.append([classe, nom, map(lambda n: tuple(n.split('/')), notes.split())])


Les données récupérées:

>>> liste_notes 
[['3eA', 'Dupont Juliette', [('3.5', '5.0'), ('27.5', '30.0'), ('6.5', '10')]], ['3eA', 'Pop Iggy', [('2.5', '5.0'), ('21.0', '30.0'), ('6.0', '10')]]]


Personnellement je veux ces notes et barèmes sous forme de float, je l'ai donc fait avec cette comprehension list:

>>> data_notes = [[classe, nom, [(float(a), float(b)) for (a,b) in notes]] for classe, nom, notes in liste_notes]


Et voilà ce que je récupère (exactement ce que je voulais):

>>> data_notes 
[['3eA', 'Dupont Juliette', [(3.5, 5.0), (27.5, 30.0), (6.5, 10.0)]], ['3eA', 'Pop Iggy', [(2.5, 5.0), (21.0, 30.0), (6.0, 10.0)]]]


a+


0
ekdm Messages postés 195 Date d'inscription dimanche 13 mai 2012 Statut Contributeur Dernière intervention 28 août 2012 38
15 juil. 2012 à 12:18
Oups pardon, j'aurais du mettre le résolu moi-même.
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
15 juil. 2012 à 12:53
Aucun problème. Merci à toi d'avoir pris le temps de poster la réponse.
0
Utilisateur anonyme
15 juil. 2012 à 19:39
Oui merci pour la soluce.
bonne route...
0