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

标签 regex r gsub

我有一个 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/

相关文章:

php - 使用正则表达式从 PHP 中的字符串解析函数

r - R中非常小数的算术

r - 是否可以将 x 轴标题与轴的值对齐?

regex - 使用 gsub 删除字符串中括号之间出现在 R 中字符串末尾的部分

regex - 在 SSIS 中使用正则表达式

.net - 查找字符串,然后使用正则表达式向后查找另一个字符串

r - 如何在 gsub 替换中使用通配符

string - R:从字符串创建可接受的名称列表

regex - Perl解析带有嵌入式逗号的CSV文件

c++ - Rcpp,使 R 从 DLL 中可以使用函数