Regex 使用list.files()查找不是从特定字符串开始的文件的正则表达式

Regex 使用list.files()查找不是从特定字符串开始的文件的正则表达式,regex,r,regex-negation,Regex,R,Regex Negation,我试图列出文件夹中不以特定字符串开头的文件。我尝试使用下面的正则表达式,但没有成功。我想列出不以“SH”开头的文件。这给了我一个语法错误: myFiles = list.files(pattern = "^((?!SH).)*\\.csv") 您可以尝试grep: grep("^((?!SH).)*\\.csv", list.files(), perl=T, value=T) 虽然list.files允许使用正则表达式模式进行匹配,但它(似乎)没有grep或gsub或gregexp的全部灵活

我试图列出文件夹中不以特定字符串开头的文件。我尝试使用下面的正则表达式,但没有成功。我想列出不以“SH”开头的文件。这给了我一个语法错误:

myFiles = list.files(pattern = "^((?!SH).)*\\.csv")

您可以尝试
grep

grep("^((?!SH).)*\\.csv", list.files(), perl=T, value=T)

虽然
list.files
允许使用正则表达式模式进行匹配,但它(似乎)没有
grep
gsub
gregexp
的全部灵活性,如
帮助('regex')
中所述,特别是它没有一个
perl
参数随模式一起传递

但是,下面应该可以做到这一点(假设您希望所有文件都不是以SH开头,而是以
.csv
结尾)

list.files(pattern = '^[^SH].+\\.csv$')

您可以使用以下正则表达式来解决
list.files()
中缺少
perl=T
支持的问题:

这是

此正则表达式允许任何1个字符的文件名,或开头没有
SH
的2个字符的文件名以及任何其他文件名

所以,使用

myFiles = list.files(pattern = "^(.|[^S].*|.[^H].*)\\.csv")

此函数列出所有文件以“SH”开头,以“.csv”结尾

list.files()[!grepl(^SH.\\\.csv$”,list.files())]

或者,如果要忽略案例,请使用
ignore.case=T


list.files()[!grepl(^SH.\\.csv$”,list.files(),ignore.case=T)]

Try
myFiles=list.files(pattern=“^(?!SH.*\.csv”,perl=T)
。谢谢你的回复。但是R似乎无法识别perl=T。我需要使用库吗?如果不接受
perl=T
,请尝试
“^\\\\\\.csv.\\\\\\\\\\.csv.[^H.\\\\\\\\\\\\\\\\\\\\\.csv.]
。或者更紧凑的
^(.|[^S]...[124;.[^ H]...*)\.csv
。非常感谢Stribizev。这一个成功了!我添加了我的答案。很高兴它对您有效。谢谢nurandi。但是,该表达式会生成所有文件和文件夹(不会过滤csv文件)不以SH开头。@stribizev answer很酷。但是,它还列出了文件夹。添加
myFiles=myFiles[!file.info(myFiles)$isdir]
以排除文件夹
myFiles = list.files(pattern = "^(.|[^S].*|.[^H].*)\\.csv")