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 :

sous chaine python


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut sous chaine python
    Bonjour,
    j'ai un petit souci.
    je souhaite rechercher une sous chaine dans une string.
    j'ai essayé la méthode find et re.search, ça marche mais pas totalement.
    je m'explique

    je recherche la sous chaine "public" dans une liste de mots composés.

    ma liste ["test python","test python","publications annulées","public averti"]

    moi ce que je souhaite, c'est savoir si le mot "public" est dans la liste.
    bon typiquement je parcours ma liste et je teste si "public" est une sous chaine de chaque élément.
    or avec find et search, il me sort "publications annulées" car il ya "public"ations (ce que je ne veux pas) et "public averti" ce que je veux.

    vous savez comment forcer la recherche précise ?

    merci

  2. #2
    Membre Expert Avatar de pacificator
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 074
    Par défaut
    Salut,
    je recherche la sous chaine "public" dans une liste de mots composés.
    moi ce que je souhaite, c'est savoir si le mot "public" est dans la liste
    C'est pas la même chose...

    Si tu veux le mot exact, tu peux parcourir chaque element de ta liste, créer une nouvelle liste en séparant cet element par l'espace puis chercher si 'public' est un element de ta nouvelle liste.

    C'est long à expliquer mais ca tiens sur une ligne avec une comprehension de liste.

    @+

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    oui, j'avais pensé à ça en splitant par l'espace.
    mais imagine le cas où tu as Côte d'or, je recherche le mot "or".
    je ne le splite plus par l'espace.
    y a plein de cas particulier.

    là je me rend compte que ça devient très complexe.

    je vais réfléchir à expliquer mon pb, car je me rends compte ce que je souhaite c'est vraiment complexe

    je te remercie

  4. #4
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    voici un ex :

    je recherche le mot "or" dans cette liste ["organigramme d'une société","Cote d'or"], là il doit me retourner vrai (à cause de Cote d'or)

    je recherche le mot "assises" dans cette liste ["cours d'assises", "exemple d'assises"], là il doit me retourner vrai (à cause d'exemle d'assises)

    je recherche le mot "public" dans cette liste ["publications trop tard", "test python"], il doit me retourner faux.

    il y a plusieurs cas, notamment les noms composés avec les tirets, les apostrophes, espaces. (je pense qu'il y a que ces 3 cas là)

    donc si vous voyez une solution, je suis preneur

    merci

  5. #5
    Membre émérite
    Avatar de GnuVince
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2004
    Messages
    679
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2004
    Messages : 679
    Par défaut
    Voici une fonction qui fait ce tu veux (je pense):
    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
     
    def liste_contient_mot(mot, L):
        rx = re.compile(r'\b%s\b' % mot)
        return any(rx.search(e) for e in L)
     
     
    >>> liste_contient_mot('public', ['foo', 'bar'])
    False
     
    >>> liste_contient_mot('public', ['foo', 'bar', 'publications diverses'])
    False
     
    >>> liste_contient_mot('public', ['foo', 'bar', 'publications diverses', 'public averti'])
    True
    Ça requiert Python 2.5+ pour la fonction any(). Remarque qu'elle est facile à écrire, donc tu peux la définir toi même si tu as besoin que ce soit compatible avec des versions plus anciennes.

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    ok, je vais tester!!
    je te tiens au courant

    merci

  7. #7
    Membre éclairé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Par défaut
    merci, c nikel ça marche !!!!
    même avec les tirets et guillements comme par ex :


    print liste_contient_mot('assise', ['foo', 'bar', 'organisation', "cours-assise"])
    >True
    print liste_contient_mot('assise', ['foo', 'bar', 'organisation', "cours d'assise"])
    >True
    print liste_contient_mot('assise', ['foo', 'bar', 'organisation', "cours-assises"])
    >False

    Par contre, j'ai python 2.4 (université), j'ai réecris la fonction any

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    def liste_contient_mot(mot, L):
        rx = re.compile(r'\b%s\b' % mot)
        return any(rx.search(e) for e in L)
     
    def any(liste):
             for x in liste:
                 if x:
                     return True
             return False
    merci beaucoup pour ton aide

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

Discussions similaires

  1. Rechercher une sous chaine dans une chaine
    Par annedjomo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/02/2005, 10h36
  2. Rechercher une sous chaine dans une chaine
    Par Oluha dans le forum ASP
    Réponses: 4
    Dernier message: 03/02/2005, 14h39
  3. Extraction de sous-chaine dans une chaine
    Par ma2th dans le forum C
    Réponses: 7
    Dernier message: 07/05/2004, 12h42
  4. Réponses: 10
    Dernier message: 24/02/2004, 12h28
  5. [sous-chaine] Avec strpos ou substring ??
    Par terziann dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 17/07/2003, 15h28

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