list.files在主文件夹和R中的第一个子文件夹中搜索后停止查找

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”),它通过删除我不想要的两个文件

您好,我正在使用RStudio 0.99.903作为Windows 64位。我位于名为“UCI HAR数据集”的文件夹中,如果我使用以下命令列出此文件夹和子文件夹中的所有文件:
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个字符。谢谢你的解释。我重新研究正则表达式,发现了一个不完美的解决方案,用否定的前瞻性:<代码>文件尝试使用交替-<代码>文件谢谢,这很清楚地解释了我的问题。很高兴它对你有用。如果我的答案对你有帮助,请考虑一下投票。(见附件)。