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 :

expressions régulières sur url


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 15
    Par défaut expressions régulières sur url
    bonjour,

    j'ai un petit soucis avec les expressions régulières en python.
    Je souhaiterais en effet créer un regex capable de capturer deux / successifs dans une url, sans pour autant matcher les deux premiers, mais je n'y parviens pas. Pourriez-vous m'aider svp ?

    Ex dans "http://www.developpez.net//forums/", je souhaiterais capturer les "//" juste avant forums/.

    merci de votre aide,
    Silvio

  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,

    Petite proposition:

    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
    import re
     
    def trouvedoubleslash(c):
        ch = re.compile(r"(?:[^./:])(//)(?:[^/]?)")
        result = []
        i = 0
        while True:
            m = ch.search(c, i)
            if m == None:
                break
            else:
                result.append(m.start(1))
                i = m.end(1)
        return result
     
    c = "http://www.developpez.net//forums/toto/titi//tata//"
    print trouvedoubleslash(c)
    [25, 43, 49]
    Comme je ne savais pas s'il fallait seulement attraper un seul "//" ou tous (après le "http://"), j'ai fait "tous", d'où la boucle. La fonction renvoie la liste des indices du 1er caractère des sous-chaines trouvées (et [] si pas trouvé)

    Non seulement ce code évite le '//' de 'http://', mais aussi le 1er '//' quand il se trouve en début de chaine comme pour une adresse de réseau "//chemin_reseau/xxx//toto". Ainsi que les 3 '/' dans "file:///chemin_disque"

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 15
    Par défaut
    Citation Envoyé par tyrtamos Voir le message
    Bonjour,

    Comme je ne savais pas s'il fallait seulement attraper un seul "//" ou tous (après le "http://"), j'ai fait "tous", d'où la boucle. La fonction renvoie la liste des indices du 1er caractère des sous-chaines trouvées (et [] si pas trouvé)

    Non seulement ce code évite le '//' de 'http://', mais aussi le 1er '//' quand il se trouve en début de chaine comme pour une adresse de réseau "//chemin_reseau/xxx//toto". Ainsi que les 3 '/' dans "file:///chemin_disque"
    Merci pour ta réponse et ton code tyrtamos,
    en fait, je me suis pas forcément bien exprimé par "capturer". Je veux simplement "remplacer" un double slash par un simple slash. Peut-on faire ça avec re.sub en utilisant le regex que tu proposes ?

    merci,
    Silvio

  4. #4
    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
    Citation Envoyé par silvio7 Voir le message
    Je veux simplement "remplacer" un double slash par un simple slash.
    C'est plus "simple" (pour autant qu'on puisse utiliser cet adjectif pour les regex ). Le motif a été légèrement modifié:

    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
    import re
     
    def remplacedoubleslash(c):
        motif = r"([^./:])(//)([^/]?)"
        return re.sub(motif, r"\1/\3", c)
     
    c = "http://www.developpez.net//forums/toto/titi//tata//"
    print remplacedoubleslash(c)
    http://www.developpez.net/forums/toto/titi/tata/
     
    c = "//chemin_reseau//forums/toto/titi//tata//"
    print remplacedoubleslash(c)
    //chemin_reseau/forums/toto/titi/tata/
     
    c = "file:///chemin//forums/toto/titi//tata//"
    print remplacedoubleslash(c)
    file:///chemin/forums/toto/titi/tata/

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Juin 2011
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 15
    Par défaut
    super, ça marche, merci encore !

    Silvio

  6. #6
    Membre très actif
    Avatar de afranck64
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2009
    Messages
    592
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : Cameroun

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

    Informations forums :
    Inscription : Janvier 2009
    Messages : 592
    Par défaut
    Une question en passant. Dans le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return re.sub(motif, r"\1/\3", c)
    que représente/signiefie le ?
    Win 10 64 bits / Linux Mint 18, - AMD A6 Quad: Py27 / Py35
    CONTENU D'UNE QUESTION
    Exemples:
    - Configuration (système d'exploitation, version de Python et des bibliothèques utilisées)
    - Code source du morceau de programme où il y a un bogue
    - Ligne de code sur laquelle le bogue apparaît
    - Erreur complète retournée pas l'interpréteur Python
    - Recherche déjà effectuée (FAQ, Tutoriels, ...)
    - Tests déjà effectués

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

Discussions similaires

  1. Expression régulière sur URL
    Par dany013 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 15
    Dernier message: 21/03/2011, 10h51
  2. [RegEx] Expression Régulière sur params url
    Par LeCaméléon dans le forum Langage
    Réponses: 4
    Dernier message: 14/11/2008, 14h40
  3. expression régulière sur une url
    Par Sh4dow49 dans le forum Général JavaScript
    Réponses: 22
    Dernier message: 20/08/2008, 21h32
  4. expression régulière sur flux
    Par zais_ethael dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 19/09/2006, 23h38

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