R regex列出不以“ AA”或“ BB”开头的文件

问题描述

这是我们需要在工作目录中创建的reprex:

library(tidyverse)
library(openxlsx)
library(readxl)
write.xlsx(list(iris),"AA-excel-file.xlsx")
write.xlsx(list(iris),"BB-excel-file.xlsx")
write.xlsx(list(iris),"CC-excel-file.xlsx")
write.xlsx(list(iris),"DD-excel-file.xlsx")
write.xlsx(list(iris),"EE-excel-file.xlsx")

我的工作目录如下:

C:
├── my-R-working-directory/
    ├── AA-excel-file.xlsx
    ├── BB-excel-file.xlsx
    ├── CC-excel-file.xlsx
    ├── DD-excel-file.xlsx
    └── EE-excel-file.xlsx

我精心制作了一个正则表达式(demo here),用于“选择”任何以AABB开头的文件:

^(?!AA|BB)\w+$

我想将此正则表达式与基数R list.files()一起使用,以列出不是以AABB开头的所有文件。这是我的尝试:

list.files("path/of/folder",pattern = "\\^(?!AA|BB)\w+$.xlsx$",full.names = TRUE)
#> Error: '\w' is an unrecognized escape in character string starting ""\\^(?!AA|BB)\w"
#> Error: unexpected ')' in "           full.names = TRUE)"

我认为我的模式论点有些偏离。这个类似的命令确实可以正常工作,但不会排除AABB文件:

list.files("path/of/folder",pattern = "\\.xlsx$",full.names = TRUE)

如何正确编写pattern参数以排除以AABB开头的任何文件?如果有能力,您可以更正我的正则表达式吗?正则表达式似乎只能使用“字母或数字”字符。任何空格,破折号,圆点等都会破坏正则表达式(see demo)

解决方法

您可以使用pattern来获取所有xlsx个文件,然后将以grepAA开头的文件BB取反:

library(tidyverse)
library(openxlsx)
library(readxl)

write.xlsx(list(iris),"AA-excel-file.xlsx")
write.xlsx(list(iris),"BB-excel-file.xlsx")
write.xlsx(list(iris),"CC-excel-file.xlsx")
write.xlsx(list(iris),"DD-excel-file.xlsx")
write.xlsx(list(iris),"EE-excel-file.xlsx")

grep("^(AA|BB).*",list.files(pattern = "\\.xlsx$"),invert = TRUE,value = TRUE)
#> [1] "CC-excel-file.xlsx" "DD-excel-file.xlsx" "EE-excel-file.xlsx"

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...