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...
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...
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)]
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)
J'ai un peu plus réfléchi au sujet et voici ma solution :
Qu'en pensez-vous ?
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("\\")
Autre petite question, à quoi sert le "r" devant une chaine de caractères ?
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 ...
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...
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
Partager