如何让R语言fs包dir_ls函数的glob匹配不区分大小写?
解决fs包dir_ls中glob匹配不区分大小写的问题
这个问题我之前在处理R脚本文件的时候也碰到过——fs包的glob匹配默认是区分大小写的,尤其是在macOS、Linux这类类Unix系统上,Windows因为文件系统本身不区分大小写,可能不会遇到这个困扰。这里有几个实用的解决办法:
使用正则表达式替代glob(推荐方案)
fs的dir_ls()支持直接传入正则表达式,还能通过ignore.case参数开启不区分大小写匹配,写法灵活又省心:library(fs) # 匹配所有以.R或.r结尾的文件 dir_ls(regex = "\\.R$", ignore.case = TRUE)简单解释下:
\\.R$是正则表达式语法,用来匹配以.R结尾的文件;加上ignore.case = TRUE后,不管后缀是大写.R还是小写.r,都会被成功匹配到。如果要匹配其他后缀(比如.Rmd/.rmd),只要把正则改成\\.Rmd$就行,同样支持大小写不敏感。用glob的字符集写法兼容大小写
如果习惯用glob参数,也可以通过字符集的方式同时匹配大小写字母:dir_ls(glob = "*.[Rr]")这里
[Rr]表示匹配括号里的任意一个字符,所以能同时命中.R和.r后缀的文件。不过这种写法对于长后缀(比如.Rprofile)会比较繁琐,需要把每个字母的大小写都列出来,不如正则表达式高效。补充:系统文件系统的影响
顺带提一句,Windows系统的默认文件系统是不区分大小写的,所以在Windows上执行dir_ls(glob = "*.R")其实也能匹配到.r文件;但类Unix系统默认区分文件名大小写,所以必须用上面的方法来处理。
内容的提问来源于stack exchange,提问作者cephalopod
相关产品推荐
相关产品推荐

