.*\\的目的是什么?

Chr*_*ris 14 regex r

我一直在玩list.files(),我想只列出001.csv010.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"因为它找不到任何匹配的东西加倍,然后紧跟两个0s.但它匹配"1100.csv",因为它匹配1,然后将它加倍,然后找到两个0s.

因此,回顾一下,".*\\000"匹配以xx00where 开头的任何字符串x代表零个或多个字符的任何子字符串.也就是说,它匹配任何重复两次然后由两个零填充的内容.