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 :

Comment trouver un ou plusieurs \ dans une regex?


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Comment trouver un ou plusieurs \ dans une regex?
    Bonjour,

    Sur cette chaine :
    si je veux trouver le + ou le . j'écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    regex =re.compile('\+')
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    regex =re.compile('\.')
    Pour le \ si j'écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    regex =re.compile('\\')
    J'ai une erreur
    idem pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    regex =re.compile(r'\')
    Si j'écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    import re
    test =input()
    regex =re.compile('.')
    print(regex.findall(test))
    Je me retrouve avec un double \ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ['a', 'b', '+', 'g', 'l', 'm', 'j', '_', '#', ':', '/', '1', '\\', '.']
    ...??

  2. #2
    Expert confirmé Avatar de CosmoKnacki
    Homme Profil pro
    Justicier interdimensionnel
    Inscrit en
    Mars 2009
    Messages
    2 986
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente Maritime (Poitou Charente)

    Informations professionnelles :
    Activité : Justicier interdimensionnel

    Informations forums :
    Inscription : Mars 2009
    Messages : 2 986
    Par défaut
    L'antislash est un caractère spécial et pour un chaîne de caractère, et pour une pattern regex.

    Dans une chaîne, il est utilisé comme caractère d'échappement: par exemple introduire un simple quote dans une chaîne délimitée par des simples quotes, ou une nouvelle ligne \n. Donc pour placer un antislash dans une chaîne de caractères, il faut le doubler:Dans une pattern, c'est également un caractère d'échappement, utilisé pour construire des séquences comme par exemple \d ou \w. Donc, pour figurer un antislash dans une pattern on doit l'échapper d'un autre antislash: \\.

    Seulement voilà, comme on écrit cette pattern dans une chaîne de caractères et que de ce fait elle sera interprétée, la chaîne '\\' donnera un simple antislash dans la pattern, or un simple antislash est une erreur de syntaxe pour la pattern (s'il n'est pas suivi de quelque chose à échapper).

    Donc pour figurer un antislash dans la chaîne de caractères d'une pattern, il faut faire un double échappement (une fois pour la chaîne, une fois pour la pattern):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pat = re.compile('\\\\')

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ['a', 'b', '+', 'g', 'l', 'm', 'j', '_', '#', ':', '/', '1', '\\', '.']
    Attention, ce double antislash est la représentation de l'antislash dans un chaîne de caractères, mais si tu l'affiches via un print(taliste[12]) tu verras qu'il s'agit bien de l'antislash.

  3. #3
    Invité
    Invité(e)
    Par défaut
    Et oui il me semble bien, dans les nombreuses infos que j'ai consultées, avoir vu passé un truc du genre '\\\\'.

    Mais bon avec ce fameux r je pensais pouvoir régler son compte à monsieur antislash.
    C'était sans compter cette excellente devise : "Une fois pour la chaîne, Une fois pour la pattern"!

    Et la messe est dite... 1 r pour 2 \\

    MERCI BEAUCOUP.

  4. #4
    Invité
    Invité(e)
    Par défaut
    Rectification : 1 r pour 2 \
    Sorry...

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 04/03/2019, 16h32
  2. [Python 3.X] Comment remplacer un texte capturé dans une regex par un autre et reinjecter le tout ?
    Par markham dans le forum Général Python
    Réponses: 5
    Dernier message: 22/11/2016, 17h38
  3. [TWebBrowser] Comment trouver tous les liens dans une page ?
    Par xenos dans le forum Composants VCL
    Réponses: 1
    Dernier message: 15/01/2006, 23h36
  4. Réponses: 2
    Dernier message: 19/10/2005, 22h29
  5. Paradox 7 Comment trier et marquer données dans une DBgrid
    Par technico dans le forum Bases de données
    Réponses: 12
    Dernier message: 04/07/2004, 11h08

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