Regex retourne le nom du fichier, supprime le chemin et l'extension du fichier
J'ai un ensemble de données.image qui contient une colonne de texte de noms de fichiers. Je voudrais revenir le nom du fichier sans le chemin d'accès ou l'extension de fichier. Généralement, les noms de mes fichiers ont été numérotées, mais ils n'ont pas à l'être. Par exemple:
df<-data.frame(data=c("a","b"),fileNames=c("C:/a/bb/ccc/NAME1.ext","C:/a/bb/ccc/d D2/name2.ext"))
Je voudrais revenir l'équivalent de
df<-data.frame(data=c("a","b"),fileNames=c("NAME","name"))
mais je ne peux pas comprendre la nappe de l'expression régulière pour ce faire avec gsub. Par exemple, je peux me débarrasser de l'extension (à condition que le nom de fichier se termine par un nombre):
gsub('([0-9]).ext','',df[,"fileNames"])
Si j'ai été d'essayer les différents modèles (par la lecture de la regex fichiers d'aide et des solutions similaires sur ce site), je ne peux pas obtenir une regex pour retourner le texte entre le dernier "/" et le premier ".". Toutes les pensées ou les transfère à des questions similaires sont très appréciés!
Le meilleur que j'ai obtenu est:
gsub('*[[:graph:]_]/|*[[:graph:]_].ext','',df[,"fileNames"])
Mais c'1) ne pas se débarrasser de tous les principaux caractères de chemin d'accès et 2) est tributaire d'une extension de fichier spécifique.
source d'informationauteur Docuemada
Vous devez vous connecter pour publier un commentaire.
Peut-être cela vous rapprochera de votre solution:
La
file_path_sans_ext
fonction est dans "outils" du paquet (qui, je crois, vient habituellement avec R), et qui va extraire le chemin jusqu'à (mais non compris) de l'extension. Lebasename
fonction va alors se débarrasser de vos informations de chemin d'accès.Ou, pour prendre de
file_path_sans_ext
et de le modifier un peu, vous pouvez essayer:Ici, j'ai "capturé" toutes les trois parties du "nom" de variables, donc si vous voulez seulement les chemins d'accès aux fichiers, vous pouvez modifier
"\\2"
à"\\1"
et si vous voulez juste les extensions de fichier, vous pouvez modifier à"\\3"
.Tout d'abord, pour se débarrasser de la "principale du chemin", vous pouvez utiliser
basename
. Pour supprimer l'extension, vous pouvez utilisersub
similaire à la description de votre dans votre question:Notez que vous devez utiliser
sub
au lieu degsub
ici, parce que l'extension du fichier ne peut se produire qu'une fois pour chaque nom de fichier. Aussi, vous devez utiliser\\.
qui correspond à un point au lieu de.
qui remplace n'importe quel symbole. Enfin, vous devez ajouter$
pour le modèle à assurez-vous que vous êtes à la suppression de l'extension que si c'est à la fin du nom de fichier.Edit: la fonction
file_path_sans_ext
suggéré dans Ananda Mahto la solution fonctionne à l'aidesub("([^.]+)\\.[[:alnum:]]+$", "\\1", x)
c'est à dire au lieu de la suppression de l'extension comme ci-dessus, la non-extension du nom de fichier est conservé. Je ne vois pas d'avantages spécifiques ou les inconvénients des deux méthodes dans le cas des OP cas.