IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Python Discussion :

Aide regex debutante


Sujet :

Python

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 5
    Points : 3
    Points
    3
    Par défaut Aide regex debutante
    Bonjour à toutes et tous,

    Par avance désolée si je poste au mauvais endroit ou si mon vocabulaire n’est pas correct.

    Voilà, j’ai un énorme fichier texte dont chaque ligne contient deux chaînes de caractères (de tout types et de longueurs aléatoires), séparées par : (deux points).
    Exemple: Chaine1&47(...)suite765:chaine2$13(...)766FiPj@

    J’aimerais filtrer de la façon suivante :

    « Chaîne 1 » contient tel caractère spécial (parmi &@$ et €)
    ET
    « Chaîne 2 » contient au moins trois des quatre types de caractère (aA1&) et de longueur minimum de 25 caractères.

    On m’a conseillé de me tourner vers les regex mais je suis complètement perdue. J’ai trouvé un petit logiciel qui permet de les utiliser pour filtrer un fichier, et cette regex qui correspond exactement à ce que je cherche pour la « chaîne 2 » :

    (?=^.{25,100}$)((?=.*\d)(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))^.*

    Elle semble bien fonctionner, mais sur toute la ligne et non sur la « chaîne 2 » naturellement, et je suis incapable de l’adapter à ma problématique ainsi que de filtrer ma « chaîne 1 »... au secours

    Merci beaucoup pour votre aide, je suis impatiente de vous lire.

  2. #2
    Expert éminent sénior
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 283
    Points : 36 770
    Points
    36 770
    Par défaut
    Salut,

    Citation Envoyé par linecedre Voir le message
    On m’a conseillé de me tourner vers les regex mais je suis complètement perdue.
    Les expressions régulières ne sont pas une fonctionnalité spécifique à Python et elles demandent un investissement/apprentissage conséquent pour apprendre à les utiliser.$


    Citation Envoyé par linecedre Voir le message
    J’aimerais filtrer de la façon suivante :

    «*Chaîne 1*» contient tel caractère spécial (parmi &@$ et €)
    ET
    «*Chaîne 2*» contient au moins trois des quatre types de caractère (aA1&) et de longueur minimum de 25 caractères.
    Pourquoi ne pas utiliser ce que vous savez déjà sur les chaînes de caractères?
    Déjà, récupérer chaine1 et chaine2 se fait avec un simple .split(':'). Puis vous pouvez créer deux fonctions test_chaine1, test_chaine2 qui iront vérifier que vos chaînes ont bien les propriétés attendues.
    Ce n'est pas ce que vous voulez mais ce faisant vous allez devoir étudier vos données pour pouvoir tester vos fonctions dans les différents cas qui pourront se présenter. Puis si çà ne va pas assez vite, peut être que les regexp apporteront quelque chose.
    note: mais si vous n'y connaissez rien, il faudra que quelqu'un code çà pour vous et que vous puissiez tester que çà le fait (d'où l'intérêt d'avoir un jeu de test et de pouvoir comparer).

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par linecedre Voir le message
    Par avance désolée si je poste au mauvais endroit ou si mon vocabulaire n’est pas correct.
    C'est vrai que c'est plus un souci de regex que de langage Python mais je ne sais pas si le fofo possède une section "regex"...

    Citation Envoyé par linecedre Voir le message
    Elle semble bien fonctionner, mais sur toute la ligne et non sur la «*chaîne 2*» naturellement
    C'est normal. Une regex examine l'intégralité de la chaine qu'elle reçoit. Elle ne sait pas que tu ne veux traiter qu'une partie de la chaine.
    Mais rien ne t'interdit toi de découper la chaine initiale dans deux sous-chaines et ne traiter qu'une des deux sous-chaines...

    Exemple: si ta ligne contient "toto:titi" (ligne="toto:titi") alors en écrivant portion=ligne.split(":") tu te retrouves avec "toto" dans portion[0] et "titi" dans portion[1]. Ensuite, tu traites portion[1] par ta regex.

    Citation Envoyé par linecedre Voir le message
    et je suis incapable de l’adapter à ma problématique ainsi que de filtrer ma «*chaîne 1*»
    Pas besoin de "l'adapter". Vu le besoin de "chaine1" (chercher un caractère parmi "&@$€" ça se fait assez simplement => x=re.search("[&@$€]", chaine_a_traiter). Au final, si la chaine à traiter contient un des caractères alors "x" ne vaut pas None (il contient un objet de type "_sre.SRE_Match") et si la chaine à traiter ne contient aucun des caractères alors il vaut None.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Expert éminent Avatar de BufferBob
    Profil pro
    responsable R&D vidage de truites
    Inscrit en
    Novembre 2010
    Messages
    3 035
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : responsable R&D vidage de truites

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 035
    Points : 8 400
    Points
    8 400
    Par défaut
    salut,

    tu peux fournir quelques lignes du gros fichier texte en question avec ce que tu attends en sortie stp ?

  5. #5
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Je ne pensais pas que j’aurais des réponses aussi rapides, merci à vous tous !

    Effectivement, le terme débutante est même impropre puisque je ne suis pas vraiment dans une démarche d’apprentissage, je cherche juste pour la première fois à utiliser les expressions régulières afin de répondre à une problématique, et je suis bien sûr incapable de coder quoi que ce soit, je comprends à peine vos réponses

    En fait le logiciel possède des expressions préenregistrées et en trifouillant j’ai réussi à appliquer celle-ci qui fonctionne sur les deux chaînes :

    .*?[A-Z].*?:.*?[A-Z].*? (au moins une majuscule dans les deux)

    Et étant donné que ma fameuse regex pour la « chaîne 2 » fonctionne bien sur toute la ligne, j’ai pensé qu’il serait possible d’ajouter simplement un « filtre » caractère spécial pour la « chaîne 1 », dans une structure similaire à la regex que je viens de vous citer.

    Mais au vu de vos réponses, j’ai certainement été un peu présomptueuse en effet...

    Ps: salut @BufferBob, je ne peux pas malheureusement, j’ai l’impression que chaque chaîne possède au moins deux types de caractères mais le reste parait aléatoire, avec une longueur max de 100 par ligne je dirais.

  6. #6
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Citation Envoyé par linecedre
    Par avance désolée si je poste au mauvais endroit ou si mon vocabulaire n’est pas correct.
    Par le ministère de la Sainte Église du Regex,
    Qu’il vous donne le pardon et la paix.


    Citation Envoyé par wiztricks
    Pourquoi ne pas utiliser ce que vous savez déjà sur les chaînes de caractères?
    Question très juste. Beaucoup s'imaginent face à un problème de traitement de chaîne de caractères et lorsqu'ils se trouvent en défaut que la solution est forcément de l'ordre des regex. C'est faux. Les regex ne sont pas une baguette magique qui résolvent tous les problèmes. Les regex ne sont qu'un moyen de décrire des chaînes de manière condensée. En aucun cas elles ne sont destinées à palier les difficultés algorithmiques du programmeur (qui de toute manière ne s'en sortira pas mieux avec.). C'est pourquoi il serait bien que tu cherches et postes une solution dans ce topic en utilisant uniquement des fonctions de base (ce sera ta pénitence). Car il est inutile d'espérer progresser en ne s'attelant pas à ce genre d'exercice.

    D'après la description que tu as donnée, une pattern probable serait:
    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
    import re
     
    mypat = ur'''
        [^:&@$]* [&@$] [^:]* : 
        (?: # groupe non-capturant contenant toutes les combinaisons possibles de trois avec les quatre classes de caractères
            (?=.*[\W_]) (?=.*[a-z]) (?=.*[A-Z])
          |
            (?=.*[\W_]) (?=.*[a-z]) (?=.*\d)
          |
            (?=.*[\W_]) (?=.*[A-Z]) (?=.*\d)
          |
            (?=.*[a-z]) (?=.*[A-Z]) (?=.*\d)
        )
        .{25,}$'''
     
    myreg = re.compile(mypat, re.X)
    (myreg étant à utiliser avec la méthode match; ne pas mettre re.compile(...) dans une quelconque boucle.)

    Voilà, c'est l'idée générale. Maintenant reste à lever quelques ambiguïtés:
    • Quelle est la version de Python que tu utilises?
    • Quel est l'encodage de ton fichier? (C'est important pour le caractère €).
    • Généralement les gens qui débutent s'imaginent que "les caractères spéciaux" c'est trois caractères qui se battent en duel d'où des listes telles que &@$€. Cette liste est-elle vraiment exhaustive? Y a-t-il des limitations quant aux caractères autorisés dans chaque partie?
    • Est-ce que la chaîne est limitée en longueur?


    Si tu utilises Python3 et que le fichier est encodé en UTF-8, enlève le "u" devant la chaîne de caractères puisqu'il gère nativement les chaînes de caractères unicode. La gestion des caractères en dehors de la table ASCII est nécessaire puisque la pattern met en jeu le caractère qui est codé sur trois octets en UTF-8 (voir la table ASCII et la table UNICODE). Par contre si tu utilises Python (>=2.6 et <3) et que le fichier est bien en UTF-8, il faut garder le "u" devant la chaîne de la pattern et tu vas devoir utiliser le module io pour pouvoir préciser l'encodage du fichier (fh = io.open('tonfichier', mode='r', encoding='utf-8')). Sinon enlève le "u" et ouvre ton fichier comme d'habitude car si ton fichier est encodé en par exemple ISO8859-1, le € serait codé sur un octet comme les autres caractères de la pattern.

    Le flag re.X est un raccourci pour le flag re.VERBOSE qui fait que les espaces sont ignorés de même que les commentaires commençant par #, ce qui est utile pour rendre lisible des patterns longues.

    Je vois que dans ta pattern copiée/collée de la deuxième partie il y a une limite à 100: n'hésite pas à la rajouter au besoin. (Pour ma part, je m'en suis tenu à ta description où aucune limite de longueur n'est donnée).

    Lectures édifiantes:

    Pour pratiquer son bréviaire: regex101.com
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  7. #7
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par linecedre Voir le message
    Je ne pensais pas que j’aurais des réponses aussi rapides
    Oui, c'est parce que le premier qui répond gagne 1000$...


    Plus sérieusement, c'est vrai que les regex remplacent une recherche plus "classique" mais rien n'interdit de coder tout de même cette recherche de façon plus classique justement. Ca permet et de clarifier la rechercher (parce que franchement ta seconde regex j'y ai rien pigé) et aussi de pouvoir la faire évoluer plus facilement.
    Par exemple «*Chaîne 2*» contient au moins trois des quatre types de caractère (min/maj/chiffre/&) et de longueur minimum de 25 caractères." pourra se coder de la façon suivante
    Code python : 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
    import string
    def cherche2(chaine):
    	if len(chaine) < 25: return False
    	modele={
    		string.uppercase : False,
    		string.lowercase : False,
    		string.digits : False,
    		"&" : False,
    	}
    	for x in chaine:
    		for k in modele.keys():
    			if modele[k] is not True and x in k: modele[k]=True
    		# for
    	# for
    	return modele.values().count(True) >= 3
    # cherche2()

    Ensuite tu appelles cherche2(chaine_a_traiter) et tu obtiens True/False selon que la chaine répond/ne répond pas à ta condition ; condition qu'on peut faire ensuite évoluer assez facilement...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Je vous remercie vraiment du temps que vous m’accordez, je ne m’attendais pas à cela, vous êtes exceptionnels ! Pour tout vous dire devant la qualité de vos réponses, je me sens maintenant honteuse de la légèreté avec laquelle j’ai posté ma question.

    Je me suis engagée à aider un proche car j’ai tâté trois classeurs Excel au travail... et maintenant je me retrouve dépassée à explorer un domaine qui m’est totalement inconnu. Je suis désolée mais j’ai choisi bêtement cette catégorie car j’ai vu un autre post qui contenait le mot regex, je ne sais même pas à quoi ressemble Python. J’ai connu l’existence même des regex il y a quelques jours par un petit éditeur de texte qui propose l’option de suppression de lignes si le pattern n’est pas trouvé, et je n’ai encore rien tenté en dehors de ce logiciel.

    Excusez-moi, je suis trop limitée pour répondre à vos questions individuellement.

    Au risque de me répéter je vais vous expliquer basiquement comment mes tentatives, au travers des fonction pré-enregistrées du logiciel qui fonctionnent notamment, m’ont laissées penser qu’il serait facile pour un sachant de régler mon problème avec trois symboles et deux parenthèses.

    Chaîne1:Chaîne2 :

    .*?[A-Z].*?: fonctionne sur la chaîne1
    :.*?[A-Z].*? fonctionne sur la chaîne2
    .*?[A-Z].*?:.*?[A-Z].*? fonctionne sur les deux chaînes !

    ^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{25,100}$ fonctionne sur la ligne complète
    Mais en ajoutant ^(.*): comme on me l’a conseillé :
    ^(.*):(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{25,100}$ fonctionne bel et bien sur la chaîne2 !

    Maintenant ma regex:
    (?=^.{25,100}$)((?=.*\d)(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))^.* fonctionne sur la ligne complète

    Mais ne fonctionne pas uniquement sur la chaîne2 en ajoutant ^(.*): comme la précédente.

    Voilà pourquoi j’ai estimé que c’était tout à fait possible en utilisant la bonne syntaxe, pensant même que je pourrais pousser le bouchon à demander un filtre caractère spécial pour la chaîne1 (alors que je pourrais m’en passer si nécessaire).

    Si vous me confirmez que ma démarche n’est pas possible je me tournerais vers Python avec l’aide des superbes réponses que vous m’avez apportées, mais cela risque vraiment d’être folklorique

    J’espère avoir été plus claire, encore une fois mille merci pour votre aide.

  9. #9
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Bon visiblement je ne vous inspire pas, ou alors je vous ai peut-être un peu gonflé...
    Je vais chercher une autre solution alors.

    Je remercie une nouvelle fois tous les intervenants qui m’ont aidés.

    Bonne soirée à tous.

  10. #10
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par linecedre Voir le message
    Bon visiblement je ne vous inspire pas, ou alors je vous ai peut-être un peu gonflé...
    Euh non pas du tout. Mais ta conclusion "Si vous me confirmez que ma démarche n’est pas possible je me tournerais vers Python avec l’aide des superbes réponses que vous m’avez apportées, mais cela risque vraiment d’être folklorique" laissait sous-entendre que tu étais arrivé à une conclusion sur ton souci.
    Toutefois (je le redis) ici c'est un forum Python, c'est à dire que ce forum est là pour répondre à ceux qui ont un souci de codage en Python. Et un souci de regex (même si Python les implémente) n'en fait pas partie. Ce n'est pas qu'on soit sectaire mais si on admet que ceux qui fréquentent ce forum sont des pros Python, ils ne sont pas forcément des pros regex. Ils peuvent l'être (CosmoKnacki en est le parfait exemple) mais ce n'est pas la majorité.
    Donc concrètement, un intervenant à l'aise avec Python arrive ici, il lit, et ben non, il a beau être à l'aise avec Python il ne sait presque rien des regex donc soit il tente d'adapter ton souci à un souci qui pourrait être le même en Python (typiquement quand j'ai dit que tu pouvais splitter ta chaine en deux parties c'était que je pensais que tu avais ta chaine dans un code Python) soit il ne dit rien et il s'en va. Mais c'est pas que tu nous gonfle, c'est qu'on est incompétents à t'aider.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  11. #11
    Expert éminent Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 858
    Points : 6 556
    Points
    6 556
    Par défaut
    Si tu prends la pattern de mon post précédent, que tu ajoutes ^ au début et que tu retires tous les espaces et le commentaire (qui commence par #), tu devrais avoir la bonne pattern. (Je pensais que tu aurais essayé de toi-même ou que tu t'en serais inspirée pour composer la tienne).
    Brachygobius xanthozonus
    Ctenobrycon Gymnocorymbus

  12. #12
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Novembre 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2018
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Vous êtes super, car en me relisant j’ai bien la sensation d’être gonflante
    J’aurais dû me renseigner un peu plus avant de poser ma question, j’ai certainement un peu abusé du temps de certains qui m’ont répondu et j’en suis désolée.

    @CosmoKnacki, je pensais ta réponse limitée à python donc je n’avais pas essayé.
    Je viens de tester et bingo ! C’est exactement que je cherchais... Merci beaucoup !

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

Discussions similaires

  1. [RegEx] Aide regex balise
    Par antoinelavigne dans le forum Langage
    Réponses: 4
    Dernier message: 05/09/2011, 21h21
  2. [RegEx] Question rapide pour aide regex
    Par antoine.dumaine dans le forum Langage
    Réponses: 1
    Dernier message: 09/06/2011, 08h35
  3. [RegEx] Aide regex nom de domaine
    Par Darkcristal dans le forum Langage
    Réponses: 4
    Dernier message: 08/06/2011, 17h08
  4. [RegEx] Aide regex et espace blanc
    Par elcoyotos dans le forum Langage
    Réponses: 12
    Dernier message: 26/09/2010, 15h47
  5. Recupérer chiffre dans un champ à l'aide regex
    Par calitom dans le forum Requêtes
    Réponses: 8
    Dernier message: 14/06/2010, 11h18

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