正则表达式查找不以 list.files() 的特定字符串开头的文件

regex to find files not starting from a particular string with list.files()

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

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

你可以试试grep:

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

虽然 list.files 允许使用正则表达式模式进行匹配,但它并不(似乎)具有 grepgsubgregexp 中所述的完全灵活性help('regex'),特别是它没有 perl 参数与模式一起传递。

但是,以下应该可以解决问题(假设您希望所有文件不是以 SH 开头,而是以 .csv 结尾。

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

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

^(.|[^S].*|.[^H].*)\.csv

这里是a demo of how this regex work

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

所以,使用

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)]