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 :

Expression Régulière, sub() = Je m'y casse les dents [Python 3.X]


Sujet :

Python

  1. #1
    Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mai 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Mai 2020
    Messages : 3
    Par défaut Expression Régulière, sub() = Je m'y casse les dents
    Bonjour à tous,

    J'aurais besoin de votre aide, je bosse sur un programme dont le but (pour simplifier) et de récupérer le texte d'une page Web et de récupérer la liste des mots existants dans le dictionnaire.

    Je suis parvenu à récupérer ma liste de mots (avec BeautifulSoup) ( Ex: 'Lille', 'ville', 'du', 'Nord'). Ensuite pour vérifier l'existence dans le dictionnaire, je passe chaque mot en paramètre de l' url https://dictionnaire.lerobert.com/definition/.
    En fonction du code HTTP 404 ou 200, j'en déduis l'existence ou non...

    Et c'est là que les problème commence, ville est dans le dictionnaire, mais pas 'ville', du coup j'ai me suis penché sur les expressions régulières car c'est à mon avis la bonne piste,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    i = 0
     
        while i < len(liste_mots_potentiels) :
     
            transformation = re.sub(r"'.'",r".")
            liste_mots_potentiels[i] = str(re.sub(r"'.'",r"."))
     
        print("\n La liste de mots clés est : ",liste_mots_potentiels)
    Etant débutant Python, je ne m'en sort pas seul. Merci d'avance pour votre aide.

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 865
    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 865
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par ChtiDamien Voir le message
    Et c'est là que les problème commence, ville est dans le dictionnaire, mais pas 'ville', du coup j'ai me suis penché sur les expressions régulières car c'est à mon avis la bonne piste,
    Oui c'est vrai que les regex permettent de faire de grandes choses pour traiter des chaines. Mais je ne comprends pas le souci entre ville et 'ville'. Est-ce que tu veux dire que tu récupères des chaines encadrées de quottes ?
    Il faut faire attention car la quotte est utilisée par Python pour afficher certaines valeurs mais la quotte ne fait pas partie de la valeur, ce n'est qu'un effet d'affichage. Exemple a=("toto", "titi"); print(a) te donnera ('toto', 'titi') à l'écran mais le contenu de a c'est toto et titi sans les quottes. Et donc si tu écris if a[0] == "'toto'" ce sera faux.
    Donc peut-être que tu vois des quottes à l'écran quand tu affiches tes résultats mais peut-être toutefois que les chaines que tu récupères sont malgré tout propres...

    Sinon donc la regex qui permet de remplacer 'xxx' par xxx n'est pas très compliqué. Ta chaine commence par une quotte, se continue par des caractères répétés et se termine par une quotte. Et il te faut juste récupérer les caractères sans les quottes. Ce qui donne :
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    exemple="'aujourd'hui'"
    resultat=re.sub(r"^'(.{1,})'$", r"\1", exemple)

    Le petit chapeau veut dire "commence par" et on rajoute la quotte car la chaine commence par la quotte. La parenthèse initie une zone mémoire numérotée (première à 1) laquelle conservera le contenu qu'on précise après. Ce contenu c'est un caractère quelconque (le point) répété de 1 à n fois (les accolades). Le contenu est défini, on ferme la mémoire (la parenthèse) et on dit que la chaine se termine (le dollar) par la quotte. Et tout ça (donc la chaine débutant et terminant par une quotte) on le remplace par le contenu mémorisé (le backaslash 1 signifiant "contenu mémoire 1") ce qui correspond à la chaine. Au final on se retrouve donc avec la chaine (y compris ses quottes internes) sans les quottes externes => aujourd'hui.

    Sinon il y a aussi les méthodes "startswith()" et "endwith()" d'une chaine
    Code python : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    exemple="'aujourd'hui'"
    if exemple.startswith("'"): exemple=exemple[1:]
    if exemple.endwith("'"): exemple=exemple[:-1]
    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]

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

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    salut,

    on peut aussi envisager un truc dans ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> liste = ["'ville'", "ville", "'''ville'''", "aujourd'hui"]
    >>> [re.match(r'^([^\w]+)?(.+?)\1?$', s).group(2) for s in liste]
    ['ville', 'ville', 'ville', "aujourd'hui"]

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 865
    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 865
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par BufferBob Voir le message
    on peut aussi envisager un truc dans ce style :
    Hé oui, quand on maitrise les regex c'est à la fois magnifique... et horrible
    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]

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

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

    Informations forums :
    Inscription : Novembre 2010
    Messages : 3 041
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    c'est à la fois magnifique... et horrible
    et encore c'est relativement soft, il y a moyen de faire bien plus dégueu formel

  6. #6
    Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mai 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Mai 2020
    Messages : 3
    Par défaut Merci pour vos réponses j'avance
    Merci je comprends mieux la façon d'utiliser les regex, mais ça ne corrige pas mon problème si je passe la variable résultat à la fin de mon lien j'obtiens ça : https://dictionnaire.lerobert.com/definition/'aujourd' hui'

    Du coup ça ne m'arrange pas pour autant moi je voudrai récupérer le lien sans l'apostrophe https://dictionnaire.lerobert.com/definition/aujourd' hui

    Je vais continuer à chercher
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
     
    import re
     
    exemple="'aujourd'hui'"
    print("Le mot récupéré est :",exemple)
     
    resultat=re.sub(r"^'(.{1,})'$", r"\1", exemple)
     
    print("\nLe mot transformé par regex est :",resultat)
     
    lien = "https://dictionnaire.lerobert.com/definition/"+exemple
     
    print("\nLe lien est :",lien)

  7. #7
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 790
    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 790
    Par défaut
    Salut,

    Relisez un peu votre code: vous vous plantez dans la variable utilisée pour fabriquer l'URL...

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

  8. #8
    Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    Mai 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms

    Informations forums :
    Inscription : Mai 2020
    Messages : 3
    Par défaut Merci de vos réponses, ça fonctionne
    Oups #JeSuisUnNoob

    Merci beaucoup, je vais pouvoir terminer mon projet.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/04/2012, 18h09
  2. Les Expressions Régulières
    Par zEndymion dans le forum Access
    Réponses: 4
    Dernier message: 12/06/2006, 14h36
  3. Réponses: 4
    Dernier message: 24/08/2005, 19h40

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