gpt4 book ai didi

正则表达式返回文件名,删除路径和文件扩展名

转载 作者:行者123 更新时间:2023-12-02 07:32:48 25 4
gpt4 key购买 nike

我有一个 data.frame,其中包含文件名文本列。我想返回不带路径或文件扩展名的文件名。通常,我的文件名已编号,但并非必须如此。例如:

df<-data.frame(data=c("a","b"),fileNames=c("C:/a/bb/ccc/NAME1.ext","C:/a/bb/ccc/d D2/name2.ext"))

我想返回相当于

df<-data.frame(data=c("a","b"),fileNames=c("NAME","name"))

但我无法弄清楚使用 gsub 执行此操作的巧妙正则表达式。例如,我可以使用以下命令删除扩展名(前提是文件名以数字结尾):

gsub('([0-9]).ext','',df[,"fileNames"])

虽然我一直在尝试各种模式(通过阅读本网站上的正则表达式帮助文件和类似的解决方案),但我无法让正则表达式返回最后一个“/”和第一个“.”之间的文本。非常感谢任何对类似问题的想法或转发!

我得到的最好的是:

 gsub('*[[:graph:]_]/|*[[:graph:]_].ext','',df[,"fileNames"])

但这 1) 并没有消除所有前导路径字符,并且 2) 依赖于特定的文件扩展名。

最佳答案

也许这会让您更接近您的解决方案:

library(tools)
basename(file_path_sans_ext(df$fileNames))
# [1] "NAME1" "name2"

file_path_sans_ext 函数来自“tools”包(我相信它通常随 R 一起提供),它将提取直至(但不包括)扩展名的路径。然后,basename 函数将删除您的路径信息。

或者,要从 file_path_sans_ext 获取并稍作修改,您可以尝试:

sub("(.*\\/)([^.]+)(\\.[[:alnum:]]+$)", "\\2", df$fileNames)
# [1] "NAME1" "name2"

在这里,我已经“捕获”了“fileNames”变量的所有三个部分,因此如果您只想要文件路径,则可以将 "\\2" 更改为 "\\1",如果您只需要文件扩展名,则可以将其更改为 "\\3"

关于正则表达式返回文件名,删除路径和文件扩展名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15073753/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com