Spécialiste des expressions régulières

Résolu
ekdm Messages postés 195 Date d'inscription   Statut Contributeur Dernière intervention   -  
 Utilisateur anonyme -
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   Statut Contributeur Dernière intervention   1 846
 
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   Statut Contributeur Dernière intervention   38
 
> 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   Statut Contributeur Dernière intervention   38
 
Oups pardon, j'aurais du mettre le résolu moi-même.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Aucun problème. Merci à toi d'avoir pris le temps de poster la réponse.
0
Utilisateur anonyme
 
Oui merci pour la soluce.
bonne route...
0