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 :

Trouver ' et remplacer par \' dans une chaîne [Fait]


Sujet :

Python

  1. #1
    Membre régulier Avatar de micatmidog
    Profil pro
    Inscrit en
    Février 2004
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Février 2004
    Messages : 94
    Points : 71
    Points
    71
    Par défaut Trouver ' et remplacer par \' dans une chaîne
    Bonjour à tous,

    J'aimerais trouver dans une chaîne les ' et les remplacer par des \' à l'aide d'une regex.

    Mais si on veut mettre un ' dans une regex, il faut obligatoirement mettre \ devant, car les délimiteurs de la regex sont des ''.

    C'est pour en fait que ma chaîne soit valide et puisse être intégrée dans une requête SQL.

    Pouvez-vous m'aider svp ?
    Merci d'avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Tu cherches à remplacer un caractère par un autre, tu n'as donc pas besoin des expressions régulières.
    Boost ftw

  3. #3
    Membre régulier Avatar de micatmidog
    Profil pro
    Inscrit en
    Février 2004
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Février 2004
    Messages : 94
    Points : 71
    Points
    71
    Par défaut
    Dis-moi comment faire alors

  4. #4
    Membre chevronné
    Avatar de kedare
    Homme Profil pro
    Network Automation Engineer
    Inscrit en
    Juillet 2005
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Network Automation Engineer

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 548
    Points : 1 861
    Points
    1 861
    Par défaut
    Citation Envoyé par micatmidog
    Dis-moi comment faire alors
    tu met le caractere a la place de la regex

  5. #5
    Membre régulier Avatar de micatmidog
    Profil pro
    Inscrit en
    Février 2004
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Février 2004
    Messages : 94
    Points : 71
    Points
    71
    Par défaut
    Ok, apparament, Python n'aime pas les antislashs (ou backslashs) dans les chaines de caractères et dans les regex...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    >>> titre = "J'ai un vélo"
    >>> re.sub('\'', '\\\'', titre)
    >>> print titre
    "J\\'ai un vélo"
    Impossible donc d'afficher un seul backslash...

    J'ai donc essayé autrement :

    => Avec EasyPHP

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    titre = "J'ai un vélo"
    page = urllib.urlopen("http://127.0.0.1/titre_bs.php?titre="+titre)
    titre=page.read()
    print titre
    et sur la page titre_bs.php :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?
    $titre = $_GET['titre'];
     
    // Ma regex est bonne en tout cas :)
    $titre = preg_replace("!'!","\'",$titre);
     
    echo $titre;
    ?>
    Mais c'est encore mieux, à l'éxecution du script, voila ce que j'ai :

    <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
    <HTML><HEAD>
    <TITLE>400 Bad Request</TITLE>
    </HEAD><BODY>
    <H1>Bad Request</H1>
    Your browser sent a request that this server could not understand.<P>
    The request line contained invalid characters following the protocol string.<P>
    <P>
    <HR>
    <ADDRESS>Apache/1.3.33 Server at <A HREF="mailto:admin@localhost">localhost</A> Port 80</ADDRESS>
    </BODY></HTML>
    Si vous avez une idée...

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2005
    Messages : 6
    Points : 7
    Points
    7
    Par défaut
    A moins que j'ai raté quelque chose cà m'a l'air bien compliqué pour pas grand chose ici, avec des regex et du easy php. Si on se limite à ce qu'il y a dans le titre ceci marche très bien:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    s="C'est facile d'utiliser replace, n'est ce pas?"
    s=s.replace('\'','\\\'',-1)
    print s
    Le résultat donne bien ceci:

    C\'est facile d\'utiliser replace, n\'est ce pas?

  7. #7
    Expert éminent sénior
    Avatar de Guigui_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 864
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2002
    Messages : 1 864
    Points : 10 067
    Points
    10 067
    Par défaut
    micatmidog, tu confonds string et affichage d'un string
    En python, les caractères spéciaux sont précédés d'un \ mais (et le fait d'utiliser des backslash n'augmente pas la longueur de ta chaîne)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    >>> division = ' 4 \\ 2 = 2'
    >>> print division
     4 \ 2 = 2

  8. #8
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Points : 4 625
    Points
    4 625
    Par défaut
    Non mais c'est fou.
    Tu veux remplacer une sous-chaîne par une autre. Utilise donc la fonction appropriée, et non pas l'usine à gaz complexe que sont les expressions régulières...

    _Xaar a donné la solution.
    Boost ftw

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    376
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 376
    Points : 402
    Points
    402
    Par défaut
    Citation Envoyé par loufoque
    Non mais c'est fou.
    Tu veux remplacer une sous-chaîne par une autre. Utilise donc la fonction appropriée, et non pas l'usine à gaz complexe que sont les expressions régulières...

    _Xaar a donné la solution.
    USINE A GAZ COMPLEXE !!!!!! Ca va pas la tête ;)C'est génial les expressions régulières!!!
    Bon par contre tu as tout à fait raison, ici un simple remplace suffit amplement et l'usage des expressions régulières n'est nullement justifié.
    "There are two major products that come out of Berkeley: LSD and UNIX.
    We don't believe this to be a coincidence."
    - Jeremy S. Anderson

    La FAQ Python
    Les cours et tutoriels pour apprendre Python
    Le Forum Python

  10. #10
    Membre régulier Avatar de micatmidog
    Profil pro
    Inscrit en
    Février 2004
    Messages
    94
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France, Loiret (Centre)

    Informations forums :
    Inscription : Février 2004
    Messages : 94
    Points : 71
    Points
    71
    Par défaut
    Merci à tous pour votre aide

    C'est enfin résolu ! Ouf ^^

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

Discussions similaires

  1. [RegEx] Remplacement multiple dans une chaîne
    Par MatthieuL dans le forum Langage
    Réponses: 1
    Dernier message: 01/03/2009, 15h44
  2. [PostgreSQL] [PostGreSQL] Trouver les ' et les remplacer par \' dans une chaine
    Par bossLINDROS dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 03/05/2007, 10h31
  3. Remplacer \ par \\ dans une string?
    Par g0ldenrno dans le forum Langage
    Réponses: 9
    Dernier message: 05/06/2006, 19h22
  4. [RegEx] Trouver tous les "/mot" dans une chaîne
    Par micatmidog dans le forum Langage
    Réponses: 7
    Dernier message: 31/03/2006, 12h07
  5. [String] Remplacement caractères dans une chaîne
    Par Crazyblinkgirl dans le forum Langage
    Réponses: 4
    Dernier message: 19/07/2004, 11h15

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