R - 抓取文件名的第一部分

时间:2013-11-01 01:21:59

标签: regex r file

我在目录dir中有很多文件,格式如下

[xyz][sequence of numbers or letters]_[single number]_[more stuff that does not matter].csv

例如xyz39289_3_8932jda.csv

我想写一个函数,它返回该目录中所有文件名的所有第一部分。第一部分,我的意思是[xyz][sequence of numbers]部分。因此,在上面的示例中,这将包括xyz39289。因此,该函数最终将返回一个列表,如

[xyz39289, xyz9382, xyz03319927, etc]

我怎样才能在R中这样做?在Java中,我会执行以下操作:

File[] files = new File(dir).listFiles();
ArrayList<String> output = new ArrayList<String>();
for(int i = 0; i < files.length; i++) {
   output.add(files[i].getName().substring(0,files[i].getName().indexOf("_"));
}

3 个答案:

答案 0 :(得分:2)

最容易删除第一个_之后的所有内容。

sub("_.*$", "", files)

答案 1 :(得分:0)

使用list.files获取文件列表后(可能只提取您希望以xyz开头的文件),我会使用sub

files <- list.files(dir)
files <- files[grep("^xyz",files, perl = TRUE)]
filepart <- sub("^(xyz[^_]*)_.*$","\\1",files, perl = TRUE)

还有一种我不太确定的regexpr方法。像

这样的东西
files <- list.files(dir)
matchdat <- regexpr("^xyz.*?(?=_)",files, perl = TRUE)
filepart <- regmatches(test,matchdat)

答案 2 :(得分:0)

这是另一个版本。列出所有文件

myfiles <- list.files(path="./dir")

将每个文件名拆分为“_”并保留第一部分

myfiles.pre <- sapply(myfiles, function(x) strsplit(x,"_",fixed=T)[[1]][1])