如何用R语言list.files()查找不以特定字符串开头的文件?
解决list.files()筛选非"CONVERTED"开头csv文件的问题
你的正则写法有误,导致匹配不到目标文件,下面提供两种可行的解决方法:
方法一:使用Perl风格正则(否定前瞻)
R的list.files()默认采用POSIX基本正则,不支持否定断言语法,需要开启perl=TRUE来启用Perl风格正则,写法如下:
x <- list.files(pattern = "^(?!CONVERTED).*\\.csv$", perl = TRUE)
^(?!CONVERTED):断言字符串开头不紧跟"CONVERTED".*:匹配任意长度的任意字符\\.csv$:精确匹配结尾的.csv(注意点号要转义,否则会匹配任意单个字符)
方法二:先获取所有csv再过滤
这种方法更直观,不容易写错正则:
# 先获取目录下所有csv文件 all_csv_files <- list.files(pattern = "\\.csv$") # 过滤掉以"CONVERTED"开头的文件 x <- all_csv_files[!grepl("^CONVERTED", all_csv_files)]
grepl("^CONVERTED", all_csv_files):返回逻辑向量,标记哪些文件以"CONVERTED"开头!取反,保留不符合该条件的文件
原代码失效原因
原正则^(!CONVERTED)*.csv存在逻辑错误:
- 在POSIX基本正则中,
!只是普通字符,没有"否定"的特殊含义 *是匹配前面的字符/组零次或多次,所以这个正则实际是匹配开头为!CONVERTED重复零次或多次,再接任意单个字符加csv的文件,自然匹配不到你需要的内容
内容的提问来源于stack exchange,提问作者BlueGyroscope
相关产品推荐
相关产品推荐

