R语言使用glob2rx匹配文件时重复匹配问题的解决求助
解决文件匹配重复问题
问题核心是你的正则模式未做精确前缀匹配,导致sas会匹配到所有包含sas子串的文件名(比如sasmin、sasmax),同时代码里的路径拼接顺序也存在错误。
下面提供两种可行的解决方法:
方法1:构造精确的正则匹配模式
通过给每个前缀加上_*.txt的后缀限制,确保每个前缀只匹配对应格式的文件:
filedir <- "你的目录路径" s <- c("sasmin","sasmax","sas") # 构造每个前缀对应的glob模式,限定前缀后必须跟下划线和txt后缀 glob_patterns <- paste0(s, "_*.txt") # 转换为正则表达式并合并 regex_pattern <- paste(glob2rx(glob_patterns), collapse = "|") # 匹配目录下的目标文件 final <- list.files(filedir, pattern = regex_pattern, full.names = TRUE)
方法2:直接生成目标文件名并筛选
如果文件名的后缀部分固定(都是_somedata.txt),可以直接生成完整文件名,再筛选实际存在的文件,这种方式更直观:
filedir <- "你的目录路径" s <- c("sasmin","sasmax","sas") # 生成所有目标文件的完整路径 target_files <- file.path(filedir, paste0(s, "_somedata.txt")) # 只保留存在的文件 final <- target_files[file.exists(target_files)]
原代码问题说明
- 路径拼接顺序错误:
paste0(s, filedir)把前缀拼在目录前面,导致生成的模式完全无效,正确的路径拼接应该用file.path或者按目录/前缀的顺序拼接。 - 模式未做精确限制:没有限定前缀后必须跟下划线,导致
sas的模式会匹配所有包含sas的文件名,进而重复匹配sasmin和sasmax文件。
内容的提问来源于stack exchange,提问作者code123
相关产品推荐
相关产品推荐

