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 :

Remplacer une sous-chaine exacte sous forme de variable par une autre [Python 3.X]


Sujet :

Python

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 32
    Par défaut Remplacer une sous-chaine exacte sous forme de variable par une autre
    Bonjour à tous,

    Voici mon problème : j'ai une chaine du type "il a mangé"

    et je veux remplacer une sous-chaine par une autre, par exemple ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    souchaine_avant = "a" 
    souchaine_apres="avoir"
    J'ai tenté des essais avec re.sub et chaine.replace, ainsi qu'une modification de ma chaine de départ sous la forme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    regex = r"^"+souschaine_avant+r"$"

    mais à chaque fois cela me donne un résultat du type "il avoir mavoirngé".

    Bref, pas moyen de me limiter à la sous-chaine exacte...


    Merci pour votre aide !

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Citation Envoyé par gingko41 Voir le message
    Bref, pas moyen de me limiter à la sous-chaine exacte...
    Peut être que vous posez mal le problème? "a" est sous chaîne de caractères que ce soit dans "a" ou dans "mangé". Mais si vous formulez la chose en disant je veux remplacer le mot "a" par "avoir", de suite on sait que çà ne s'appliquera pas au mot "mangé".
    Et c'est quoi la différence entre "il a mangé" et la liste de mots [ "il", "a", "mangé" ]? C'est juste une représentation plus adaptée de la même information à la transformation que vous voulez faire.

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

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 32
    Par défaut
    Bonjour wiztricks,

    effectivement, je me suis mal exprimée, c'est bien le verbe "a" que je veut remplacer par "avoir" mais pas quand il s'agit de la lettre A de "manger".

    Pour la liste je ne suis pas sûre d'avoir bien compris : est-ce qu'une solution serait de découper la chaine en différents mots et de dire que si "a" figure dans cette liste, alors je le remplace par "avoir" ?
    Dans ce cas, je risque d'avoir toujours le problème avec le "a" compris dans "manger" ?

    Bonne journée et merci

  4. #4
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    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 738
    Par défaut
    Citation Envoyé par gingko41 Voir le message
    Pour la liste je ne suis pas sûre d'avoir bien compris : est-ce qu'une solution serait de découper la chaine en différents mots et de dire que si "a" figure dans cette liste, alors je le remplace par "avoir" ?
    Dans ce cas, je risque d'avoir toujours le problème avec le "a" compris dans "manger" ?
    Les mots de la liste égaux à "a" constitue un sous ensemble des mots qui contiennent "a"... et donc çà ne se teste pas pareil, non?

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

  5. #5
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 215
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 215
    Par défaut
    Quand tu traites "il a mangé" comme une chaîne, dans cette chaîne, TOI, tu vois qu'il y a 2 caractères un peu particuliers, qui sont des séparateurs de mots. Mais ton ordinateur voit une chaîne avec 10 caractères, et ces 10 caractères jouent tous le même rôle.

    Si tu te débrouilles pour dire que tu ne veux plus traiter la chaîne "il a mangé", mais la liste ("il", "a", "mangé"), ça change tout.

  6. #6
    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,

    d'un point de vue purement regex il faut considérer ce qu'on appelle les word boundaries \b :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    >>> re.sub(r'\ba\b', 'avoir', u'il a mangé')
    u'il avoir mangé'

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2017
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2017
    Messages : 32
    Par défaut
    Bonjour et merci à tous :

    avec une transformation en liste et le word boundaries, ça marche !

    Bonne journée à vous

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

Discussions similaires

  1. Découper une chaine en sous chaine
    Par d.tellier dans le forum Développement
    Réponses: 5
    Dernier message: 23/12/2010, 18h19
  2. [RegEx] Savoir si une chaine contient sous-chaine
    Par astrolane dans le forum Langage
    Réponses: 2
    Dernier message: 01/09/2009, 16h53
  3. parse une chaine en sous chaine de longueur max X
    Par bruman dans le forum Langage
    Réponses: 2
    Dernier message: 21/07/2008, 17h12
  4. Parcourt et separation de chaine en sous chaines
    Par FstDsi dans le forum Débuter avec Java
    Réponses: 3
    Dernier message: 29/05/2008, 10h02
  5. Séparer une chaine en sous chaine
    Par firemax dans le forum C
    Réponses: 9
    Dernier message: 03/06/2005, 12h23

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