list.files在主文件夹和R中的第一个子文件夹中搜索后停止查找
您好,我正在使用RStudio 0.99.903作为Windows 64位。我位于名为“UCI HAR数据集”的文件夹中,如果我使用以下命令列出此文件夹和子文件夹中的所有文件:list.files在主文件夹和R中的第一个子文件夹中搜索后停止查找,r,regex,R,Regex,您好,我正在使用RStudio 0.99.903作为Windows 64位。我位于名为“UCI HAR数据集”的文件夹中,如果我使用以下命令列出此文件夹和子文件夹中的所有文件:list.files(recursive=TRUE),则所有文件如下所示: 但是,我想改进代码以列出除“feature_info”和“README”之外的所有.txt文件,这就是我使用的list.files(recursive=TRUE,pattern=“[^\\\\\\\\\].txt”),它通过删除我不想要的两个文件
list.files(recursive=TRUE)
,则所有文件如下所示:
但是,我想改进代码以列出除“feature_info”和“README”之外的所有.txt文件,这就是我使用的list.files(recursive=TRUE,pattern=“[^\\\\\\\\\].txt”)
,它通过删除我不想要的两个文件来工作,但是,它也排除了“/train”文件夹下的文件。有人能帮助澄清为什么它停止查看第二个子文件夹吗
谢谢 code>[^\\\\\\\\\\\]匹配1个不等于
、空格、
、^
、R
、E
、D
、M
、E
的字符,因为[^…]/code>是一个否定的括号表达式,它匹配除括号中定义的字符外的所有字符。然后,
匹配任何字符,txt
将txt
作为文字字符序列匹配
由于无法将PCRE regex与一起使用,因此可以先从指定目录获取所有文件,然后使用支持PCRE regex与此处所需的查找工具的grep
将其过滤掉:
> files <- list.files("C:\\5")
> files
[1] "info.txt" "README.txt" "some-text.txt"
> files <<- grep("(?<!^README|^info)\\.txt$", files, perl = TRUE, value = TRUE)
> files
[1] "some-text.txt"
>文件
[1] “info.txt”“README.txt”“some text.txt”
>档案
注意
(?-如果字符串开头有自述文件
或信息
,并且它们位于当前位置的左侧(即之前的右侧),则会导致匹配失败的负查找
\.
-一个单点(模式是\.
,但我们需要在字符串文本中使用双反斜杠来表示文本反斜杠)
txt
-文字字符序列
$
-字符串结束
因为模式只匹配5个字符:[^\\\\\\^\\]匹配不等于<代码>的1个字符。谢谢你的解释。我重新研究正则表达式,发现了一个不完美的解决方案,用否定的前瞻性:<代码>文件尝试使用交替-<代码>文件谢谢,这很清楚地解释了我的问题。很高兴它对你有用。如果我的答案对你有帮助,请考虑一下投票。(见附件)。