在R语言中用正则表达式排除含点号文件名的问题求助
解决R语言list.files排除含点文件名的问题
你之前写的正则逻辑不对,[^\\.]或者[^.]仅能匹配单个非点字符,而list.files的pattern参数默认是匹配文件名中任意位置的子串——只要文件名里存在非点字符就会被选中,自然达不到排除含点文件的效果。
给你两种可行的解决思路:
方案一:用正确正则直接匹配无点文件名
使用正则^[^.]+$,它的含义是「从文件名开头到结尾的所有字符都不是点」,代码如下:
list.files(R.home(), pattern = "^[^.]+$")
其中^匹配字符串开头,[^.]+匹配一个或多个非点字符,$匹配字符串结尾,确保整个文件名里完全不含点。
方案二:先获取全量文件再过滤
如果觉得正则不好记,可以先拿到所有文件列表,再反向过滤掉含有点的文件:
# 基础R写法 all_files <- list.files(R.home()) no_dot_files <- all_files[!grepl("\\.", all_files)]
或者用tidyverse工具集的写法(需先加载stringr包):
library(stringr) no_dot_files <- list.files(R.home()) %>% str_subset("\\.", negate = TRUE)
内容的提问来源于stack exchange,提问作者wallace
相关产品推荐
相关产品推荐

