Regex 使用list.files()查找不是从特定字符串开始的文件的正则表达式
我试图列出文件夹中不以特定字符串开头的文件。我尝试使用下面的正则表达式,但没有成功。我想列出不以“SH”开头的文件。这给了我一个语法错误: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的全部灵活
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)]
TrymyFiles=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")