用Rfs::dir_ls匹配文件名开头?

Use R fs::dir_ls to match the beginning of file name?

我正在尝试使用 fs::dir_ls() 来 return 与下面的 list.files() 示例相同的结果。最终,我只是想 return 以特定模式开头的文件。

path <- "./path/to/files"
pattern <- "^ABC_.*\.csv$"

# list files returns the expected output 
list.files(path = path, pattern = pattern, full.names = T)

# [1] "path/to/files/ABC_1312.csv" 
# [2] "path/to/files/ABC_ACAB.csv"

# dir_ls does not return any matching files
fs::dir_ls(path = path, regexp = pattern)

# character(0)

我认为这里的问题是每个方法的模式参数的范围不同。 list.files() 模式仅应用于文件路径的 basename(),而 dir_ls() 正则表达式参数应用于完整路径。因此,^ 正则表达式被应用于路径的开头,而不是每个文件的开头。有没有办法将 dir_ls() 的范围限制为仅匹配每个文件的 basename() 上的模式,类似于 list.files()?任何其他见解表示赞赏!

在 GitHub 上查看此 issue

you need to modify your regular expression to match the full path then, or use a filtering function that only looks at the basename.

使用

pattern <- paste0(.Platform$file.sep, "ABC_.*\.csv$)

你也可以这样做

regexp = fs::path(path, pattern)