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 :

Recherche d'une regex


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 Recherche d'une regex
    Bonjour,
    je voudrais passer de quelque chose comme "/Users/login/Documents/.../Music" à "/Users/login/Documents/../../../Music".

    Autrement dit, toute chaîne du type "/...../", avec ici 5 points, doit être remplacée par "/../../../../../" avec 2×5 points.

    Toute info. est la bienvenue.

  2. #2
    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 est obligé d'utiliser re, car il y a d'autres solutions

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ch="/Users/login/Documents/.../Music"
    new_ch=ch.replace("/.../", "/../../../../../")
    print new_ch
    /Users/login/Documents/../../../../../Music

  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
    Oui car je ne connais pas le nombre de points a priori.

  4. #4
    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
    Sans regex, on peut faire comme suit :
    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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    #!/usr/bin/env python3
     
    import os
     
    # Linux and Mac examples.
    def custom(path):
        i = path.find('/.')
        newPath = ''
     
        while(i >= 0):
            j = path.find('./', i)
     
            if j < i:
                break
     
            newPath += path[:i] + "/" + "../"*(j - i)
     
            path = path[j+2:]
            i = path.find('/.')
     
        if newPath:
            newPath += path
            return newPath
        else:
            return onePath
     
    for onePath in [ '/Users/login/Documents',
                     '/Users/login/Documents/./Music',
                     '/Users/login/Documents/../Documents/Misc',
                     '/Users/login/Documents/.../Documents/Misc',
                     '/Users/login/Documents/..../Documents/Misc/../Test'
                   ]:
        pathCustomized = custom(onePath)
     
        print( '',
               onePath,
               pathCustomized,
               os.path.normpath(pathCustomized),
               sep = '\n')

  5. #5
    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
    Avec ce code tu devrais pouvoir gérer ce que tu veux, enfin je pense

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    >>> ch="/Users/login/Documents/.../Music"
    >>> pattern='/\.+/'
    >>> search=re.findall(pattern, ch)
    >>> print search
    ['/.../']
    >>> ch_new=re.sub(pattern, "/../../../../../", ch)
    >>> print ch_new
    /Users/login/Documents/../../../../../Music

  6. #6
    Membre Expert
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    1 418
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 418
    Par défaut
    fred 1599,

    il faut un code qui calcule lui même la longueur de
    "/../../../../../" qu’il faut dans
    ch_new=re.sub(pattern, "/../../../../../" , ch)
    à partir de la longueur du '/...../' détecté.
    Sinon tu penses bien que ça n’a pas beaucoup d’intérêt.


    Moi j’ai ça:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    import re
    pat_slashpoints = re.compile('(/\.+)(?=/)')
     
    def slashpoints(x):
        a,b = pat_slashpoints.search(x).span()
        return ch[0:a] + (b-a-1)*'/..' + ch[b:]
     
     
    for ch in ("/Users/login/Documents/./Music",
              "/Users/login/Documents/../Music",
              "/Users/login/Documents/.../Music",
              "/Users/login/Documents/..../Music",
              "/Users/login/Documents/......./Music"):
        print slashpoints(ch)

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

Discussions similaires

  1. [RegEx] recherche d'une REGEX
    Par tdelacou dans le forum Langage
    Réponses: 3
    Dernier message: 16/01/2013, 15h48
  2. [Regex] recherche d'une regex
    Par hannibal.76 dans le forum Débuter avec Java
    Réponses: 6
    Dernier message: 14/12/2010, 19h55
  3. [Dojo] Regex : Recherche d'une valeur dans un tableau
    Par devkaty dans le forum Bibliothèques & Frameworks
    Réponses: 11
    Dernier message: 19/05/2010, 18h49
  4. Recherche d'une regex toute simple (mais pas pour moi)
    Par rambc dans le forum Général Python
    Réponses: 7
    Dernier message: 15/04/2009, 15h23
  5. [RegEx] Recherche une regex valide
    Par dondano dans le forum Langage
    Réponses: 3
    Dernier message: 13/04/2007, 19h57

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