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 :

Sous chaine


Sujet :

Python

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Par défaut Sous chaine
    Bonjour,
    je dispose de deux chaines :
    dir = 'E:\huhu\haha\hihi'
    root = "E:\huhu"
    je souhaite récupéré tout ce qui suit root dans dir (cas général) c'est à dire dans mon exemple "haha\hihi". Merci de votre aide...

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 119
    Par défaut
    J'ai eu un peu de tps à perdre alors voila un petit bout de code qui fait ce que tu veux, il y a peut-être une façon plus académique de le faire mais je ne la connait pas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import re, string
     
    dir = 'E:\huhu\haha\hihi'
    tmp_dir = string.replace(dir, '\\', '.')
    root = 'E:\huhu'
    tmp_root = string.replace(root, '\\', '.')
    rslt = ''
     
    if re.search("^" + tmp_root, tmp_dir):
        rslt = dir[len(root)+1:len(dir)]

  3. #3
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    Quelques optimisations au code de Corpio:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    import re
     
    dir = r'E:\huhu\haha\hihi'
    root = r'E:\huhu'
    tmp_root = re.escape(root)
    rslt = ''
     
    m = re.match(tmp_root + '(.+)', dir)
    if m is not None:
        rslt = m.group(1)

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Par défaut
    J'ai un peu plus réfléchi au sujet et voici ma solution :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    import re
     
    dir = 'E:\huhu\haha\hihi'
    root = 'E:\huhu'
     
    exp = dir.replace("\\", "\\\\") + '(.*)'
    exp = re.compile(exp)
     
    rslt = exp.search(dir).group(1).lstrip("\\")
    Qu'en pensez-vous ?

    Autre petite question, à quoi sert le "r" devant une chaine de caractères ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 119
    Par défaut
    mazty, j'ai testé ton code mais il marche pas. L'as-tu testé avant de le posté ??

    Pour ce qui est du code de oiffrig, il renvoit dans la variable rslt ce que tu veut récupérer mais avec un backslash devant ("\haha\hihi"). Tout dépendant de ce que tu doit faire ac ce résultat et si ce backslash est génant.

    Pour ce qui est des "r" devant les chaines de caractères, je ne sais pas à quoi ils servent mais si tu les enlèvent sa marchent qd même donc ...

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 6
    Par défaut
    Mon code marche chez moi mais j'utilise des variables déclarées différement j'ai du faire une petite erreur...

    Sinon pour supprimer le backslash en début de ligne il suffit de faire .lstrip("\\") sur la chaine voila...

  7. #7
    Membre émérite

    Profil pro
    Inscrit en
    Août 2004
    Messages
    723
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2004
    Messages : 723
    Par défaut
    Le "r" devant les chaînes de caractères c'est pour "raw-string", c'est-à-dire que les antislashs ("\") sont traités comme un caractère, ça évite de devoir tous les doubler
    Pour l'antislash il suffit de l'enlever par la suite ou de l'ajouter dans la regex

Discussions similaires

  1. Rechercher une sous chaine dans une chaine
    Par annedjomo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 04/02/2005, 10h36
  2. Rechercher une sous chaine dans une chaine
    Par Oluha dans le forum ASP
    Réponses: 4
    Dernier message: 03/02/2005, 14h39
  3. Extraction de sous-chaine dans une chaine
    Par ma2th dans le forum C
    Réponses: 7
    Dernier message: 07/05/2004, 12h42
  4. Réponses: 10
    Dernier message: 24/02/2004, 12h28
  5. [sous-chaine] Avec strpos ou substring ??
    Par terziann dans le forum SQL Procédural
    Réponses: 5
    Dernier message: 17/07/2003, 15h28

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