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 :

Nettoyer les \n entres des guillemets


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut Nettoyer les \n entres des guillemets
    Bonjour.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    xxx  "aaa
    bbb
     
    ccc" yyyy
    zzz
    J'aimerais nettoyer \n entre des guillemets "..." afin d'obtenir ce qui suit.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    xxx  "aaa bbb ccc" yyyy
    zzz
    Voyez-vous une méthode élégante à base de regex peut-être de faire cela ? J'en vois une facile à mettre en place mais peu élégante : on parcourt le texte à la recherche des bouts de textes entre des guillemets et on y retire les \n.

  2. #2
    Expert confirmé
    Avatar de tyrtamos
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2007
    Messages
    4 486
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2007
    Messages : 4 486
    Billets dans le blog
    6
    Par défaut
    Bonjour,

    Essaie ça (Python 2.7):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    import re
     
    def sub(g):
        return g.group(0).replace('\n', '')
     
    ch = '''xxx  "aaa
    bbb
     
    ccc" yyyy
    zzz'''
     
    print re.sub(r'(\"[^\"]+\")', sub, ch)
    Ce qui donne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    xxx  "aaabbb ccc" yyyy
    zzz
    Mais teste bien, parce que je ne suis pas doué en regex

  3. #3
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    Merci.

    On verra bien à l'usage s'il y a un souci mais a priori cela marche bien.

  4. #4
    Expert confirmé
    Avatar de fred1599
    Homme Profil pro
    Lead Dev Python
    Inscrit en
    Juillet 2006
    Messages
    4 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Lead Dev Python
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2006
    Messages : 4 062
    Par défaut
    On peut le faire à coups de slicing et de replace, le principe étant de retrouver les deux guillemets à l'aide de la méthode find.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    >>> ch
    'xxx  "aaa\nbbb\n \nccc" yyyy\nzzz'
    >>> deb = ch.find('\"')+1
    >>> fin = ch[deb+1:].find('\"')+deb+1
    >>> part = ch[deb:fin]
    >>> ch.replace(part, part.replace('\n', ' '))
    'xxx  "aaa bbb   ccc" yyyy\nzzz'
    Bonne continuation...

  5. #5
    Membre éprouvé

    Profil pro
    Account Manager
    Inscrit en
    Décembre 2006
    Messages
    2 301
    Détails du profil
    Informations personnelles :
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Account Manager

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 301
    Par défaut
    J'y avais pensé, cf le post initial, mais c'est peu élégant.

  6. #6
    Membre émérite
    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
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    >>> ch='"xxx  "aaa\nbbb\n \nccc" yyyy\nzzz'
    >>> remplace=ch.split('"')
    >>> remplace[1]=" ".join(remplace[1].split())
    >>> '"'.join(remplace)
    'xxx  "aaa bbb ccc" yyyy\nzzz'
    Tous les sauts de ligne sont remplacés par des espaces; un seul espace est inséré lorsqu'il y a plusieurs sauts de ligne.
    Non?

    Clodion

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

Discussions similaires

  1. Rechercher un string entre des guillemets (Expression régulière)
    Par misswatson dans le forum Débuter avec Java
    Réponses: 27
    Dernier message: 22/04/2013, 14h55
  2. Récupérer motif entre des guillemets
    Par oliviernouhi dans le forum Langage
    Réponses: 30
    Dernier message: 13/07/2012, 14h22
  3. Réponses: 2
    Dernier message: 10/01/2012, 23h28
  4. Mysql : choix des types pour les champs entre :
    Par Thierry8 dans le forum Administration
    Réponses: 3
    Dernier message: 14/06/2006, 08h22
  5. Connaitre Les adr IP des switch entre 2 pc
    Par TOPGUN89 dans le forum Hardware
    Réponses: 12
    Dernier message: 01/06/2006, 22h13

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