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 :

Séléctionner une sous-chaine entre 2 guillemets


Sujet :

Python

  1. #1
    Membre régulier Avatar de Tornade8912
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 74
    Points
    74
    Par défaut Séléctionner une sous-chaine entre 2 guillemets
    Bonjour,
    Je voudrai récupérer une chaine dans une autre. Voici la chaine de base : "Bonjour tout le \"monde\"".
    J'utilise bien sur les antislash pour mettre des double quote dans une chaine. La chaine que je veux récupérer est : "monde". Donc en fait si
    vous avez compris je veux récupérer les caractères présents entre les 2 double quotes. Une sous chaine quoi.

    Cordialement

  2. #2
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Bonjour

    si le problème n'est pas plus général tu peux faire comme ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> chaine = "Bonjour tout le \"monde\""
    >>> chaine
    'Bonjour tout le "monde"'
    >>> chaine.split('"')[1]
    'monde'
    et si plusieurs sous-chaines entre double-quotes sont présentes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> chaine = "Bonjour tout le \"monde\", j'ai dit \"le MONDE\" !"
    >>> 
    >>> sous_chaines = chaine.split('"')[1::2]
    >>> sous_chaines
    ['monde', 'le MONDE']
    Passer par des expressions régulières me semble luxueux ici.
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  3. #3
    Membre régulier Avatar de Tornade8912
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 74
    Points
    74
    Par défaut
    Merci c'est génial ça fonctionne !

  4. #4
    Membre régulier Avatar de Tornade8912
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 74
    Points
    74
    Par défaut
    Ah et aussi pendant que j'y suis savez vous comment je pourrais faire pour remplacer la chaine sélectionné ?
    Par exemple dans : "Bonjour tout le \"monde\", j'ai dit \"LE MONDE\"" avec le code que vous m'avez fourni je peux retourner un tableau avec les 2 chaines. Mais je voudrais en fait remplacer ces 2 chaines par un nombre qui va s'incrémenter à chaque fois que le script va trouver une chaine.

    En gros je voudrais que ça fasse à la finalité : Bonjour tout le 1, j'ai dit 2
    Les chiffres correspondent au chaines de caractères bien sur.

    Cordialement

  5. #5
    Membre chevronné
    Homme Profil pro
    Enseignant
    Inscrit en
    Juin 2013
    Messages
    1 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2013
    Messages : 1 609
    Points : 2 073
    Points
    2 073
    Par défaut
    avec replace.
    Pas d'aide par mp.

  6. #6
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Citation Envoyé par marco056 Voir le message
    avec replace.
    Ca peut le faire. Attention d'utiliser le paramètre count (à 1) car plusieurs sous-chaines peuvent être identiques.

    Et sinon, en python 2 (because division entière) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> chaine = "Bonjour tout le \"monde\", j'ai dit \"le MONDE\" ! bon sens \"MONDE\""
    >>> parties = chaine.split('"')
    >>> parties
    ['Bonjour tout le ', 'monde', ", j'ai dit ", 'le MONDE', ' ! bon sens ', 'MONDE', '']
    >>> 
    >>> ''.join([ str(e/2+1) if e % 2 else elt for e, elt in enumerate(parties) ])
    "Bonjour tout le 1, j'ai dit 2 ! bon sens 3"
    >>>
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  7. #7
    Membre éprouvé
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Points : 926
    Points
    926
    Par défaut
    Citation Envoyé par plxpy Voir le message
    Et sinon, en python 2 (because division entière)
    Bonjour,
    Et sinon en Python3!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> chaine = "Bonjour tout le \"monde\", j'ai dit \"le MONDE\" ! bon sens \"MONDE\""
    >>> parties = chaine.split('"')
    >>> parties
    ['Bonjour tout le ', 'monde', ", j'ai dit ", 'le MONDE', ' ! bon sens ', 'MONDE', '']
    >>> 
    >>> ''.join([ str(e//2+1) if e % 2 else elt for e, elt in enumerate(parties) ])
    "Bonjour tout le 1, j'ai dit 2 ! bon sens 3"
    >>>
    Clodion

  8. #8
    Membre régulier Avatar de Tornade8912
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 74
    Points
    74
    Par défaut
    Merci de votre réponse ça fonctionne sauf que ça reste toujours à 1. Et comme j'ai vu que vous aviez précisé qu'il faut mettre le paramètre count à 1 j'ai pas trop bien compris. Pouvez vous m'expliquer ?
    Cordialement

  9. #9
    Membre éprouvé
    Homme Profil pro
    Aucune activité
    Inscrit en
    Novembre 2011
    Messages
    505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Aucune activité

    Informations forums :
    Inscription : Novembre 2011
    Messages : 505
    Points : 926
    Points
    926
    Par défaut
    Citation Envoyé par Tornade8912 Voir le message
    Merci de votre réponse ça fonctionne sauf que ça reste toujours à 1. Et comme j'ai vu que vous aviez précisé qu'il faut mettre le paramètre count à 1 j'ai pas trop bien compris. Pouvez vous m'expliquer ?
    Cordialement
    Bonjour,
    De quelle méthode parlez-vous? Avec "replace"? Avec "join"?
    Qu'est-ce qui reste toujours à 1?

    Si vous utilisez "count" vous devriez utiliser "replace". Comment avez-vous procédé? I.E. Quel est le code que vous avez testé?
    Si tel est le cas c'est aussi que vous utilisez "split"? Et donc que vous avez une liste des séquences entre guillemets?

    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
    17
    18
    19
     
    >>> chaine = "Bonjour tout le \"monde\", j'ai dit \"le MONDE\" ! bon sens \"MONDE\""
    >>> chaine
    'Bonjour tout le "monde", j\'ai dit "le MONDE" ! bon sens "MONDE"'
    >>> partie = chaine.split('"')
    >>> partie
    ['Bonjour tout le ', 'monde', ", j'ai dit ", 'le MONDE', ' ! bon sens ', 'MONDE', '']
    >>> lst_ss_ch = parties[1::2]
    >>> lst_ss_ch
    ['monde', 'le MONDE', 'MONDE']
    >>> ind = 0
    >>> for seq in lst_ss_ch:
    	ind += 1
    	chaine = chaine.replace('"' + seq + '"', str(ind), 1)
     
     
    >>> chaine
    "Bonjour tout le 1, j'ai dit 2 ! bon sens 3"
    >>>
    Clodion

  10. #10
    Membre expérimenté Avatar de plxpy
    Homme Profil pro
    Ingénieur géographe
    Inscrit en
    Janvier 2009
    Messages
    792
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 59
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur géographe
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2009
    Messages : 792
    Points : 1 481
    Points
    1 481
    Par défaut
    Citation Envoyé par Tornade8912 Voir le message
    Merci de votre réponse ça fonctionne sauf que ça reste toujours à 1.
    Euh .. je me suis cassé le ... , pardon, la tête à trouver un exemple avec plusieurs chaines entre double quotes et "ça reste pas toujours à 1" ! J'obtiens bien 1, puis 2 et enfin 3.

    Ma solution peut ne pas toujours marcher mais si tu as un contre-exemple, poste le ! Un copier-coller, c'est trop dur ?
    "La simplicité ne précède pas la complexité, elle la suit." - Alan J. Perlis
    DVP ? Pensez aux cours et tutos, ainsi qu'à la FAQ !

  11. #11
    Membre régulier Avatar de Tornade8912
    Homme Profil pro
    Développeur
    Inscrit en
    Mars 2014
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2014
    Messages : 83
    Points : 74
    Points
    74
    Par défaut
    Merci Clodion ça fonctionne !

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

Discussions similaires

  1. Regex : récuperer une chaine entre deux guillemets anglais(")
    Par Phonatacid dans le forum Débuter avec Java
    Réponses: 5
    Dernier message: 01/06/2011, 11h02
  2. Réponses: 1
    Dernier message: 16/10/2010, 17h50
  3. je cherche une sous chaine dans une chaine
    Par avprive dans le forum C++
    Réponses: 3
    Dernier message: 17/03/2005, 01h48
  4. Rechercher une sous chaine dans une chaine
    Par annedjomo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/02/2005, 10h36
  5. Rechercher une sous chaine dans une chaine
    Par Oluha dans le forum ASP
    Réponses: 4
    Dernier message: 03/02/2005, 14h39

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