Récupérer du texte entre 2 motifs

Fermé
Arthur - 18 févr. 2013 à 11:41
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 - 18 févr. 2013 à 14:43
Bonjour,
Je souhaite récupérer du texte entre 2 motifs dans un chemin d'accès de ce type :
C:\Documents and Settings\ASD User\Desktop\Arthur\Arthur\M5a.txt


Mon premier réflexe a été d'écrire :
/\\(.*?)\./

Mais cela renvoie bien évidemment :
 Documents and Settings\ASD User\Desktop\Arthur\Arthur\M5a

alors que je souhaiterai uniquement :
M5a

Sachant que le chemin d'accès peut changer, je voudrai pourvoir isoler les caractères entre le dernier "\" et le ".txt". Et je ne sais pas comment préciser cela...

D'avance merci de votre aide,

Arthur
A voir également:

1 réponse

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 18/02/2013 à 14:19
Salut Arthur,

Tu peux utiliser la regexp suivante :

/.*\\+(.*)\.txt$/

Il faudra :

- au moins un anti-slash
- n'importe quoi avant le dernier anti-slash
- que la ligne se termine obligatoirement par .txt

N'oublie pas qu'un répertoire peut éventuellement contenir un point dans son nom.

De même, un nom de fichier peut contenir plusieurs points.


Dal
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié par [Dal] le 18/02/2013 à 14:45
Sinon, une meilleure façon de récupérer le nom du fichier sans son extension au sein d'un chemin, serait plutôt, en Perl, d'utiliser le module File::Basename (qui fait partie de Core, donc que tu dois déjà avoir).

https://metacpan.org/pod/release/DOM/perl-5.12.5/lib/File/Basename.pm

use File::Basename;  

fileparse_set_fstype("MSWin32");    # en principe non nécessaire  
                                    # si tu testes des chemins au  
                                    # format natif de ton système  
                                    # d'exploitation  

my $path = "C:\\Documents and Settings\\ASD User\\Desktop\\Arthur\\Arthur\\M5a.txt";  
my($filename, $directories, $suffix) = fileparse($path, ".txt");  

print $filename;

Cette solution est plus portable.

Normalement, tu n'as pas à préciser fileparse_set_fstype, car Perl "sait" déjà quel est le système sur lequel il tourne.


Dal
0