我一直在玩list.files()
,我想只列出001.csv
来010.csv
,我想出了这个命令:
list_files <- list.files(directory, pattern = ".*\\000|010", full.names = TRUE)
Run Code Online (Sandbox Code Playgroud)
这段代码给了我想要的东西,但是我并不完全理解pattern参数发生了什么.pattern = .*\\\000
工作怎么样?
Jos*_*ien 14
\\0
是一个反向引用,将整个正则表达式匹配插入到该点.比较以下内容,看看这意味着什么:
sub("he", "", "hehello")
## [1] "hello"
sub("he\\0", "", "hehello")
## [1] "llo"
Run Code Online (Sandbox Code Playgroud)
对于像"001.csv"
或的字符串"009.csv"
,会发生的情况是.*
匹配零个字符,\\0
一次重复那些零字符,并00
匹配字符串中的前两个零.成功!
这种模式不匹配,"100.csv"
或者"010.csv"
因为它找不到任何匹配的东西加倍,然后紧跟两个0
s.但它会匹配"1100.csv"
,因为它匹配1
,然后将它加倍,然后找到两个0
s.
因此,回顾一下,".*\\000"
匹配以xx00
where 开头的任何字符串x
代表零个或多个字符的任何子字符串.也就是说,它匹配任何重复两次然后由两个零填充的内容.