В чем цель. * \\?

Я играл с list.files(), и мне хотелось только перечислить 001.csv через 010.csv, и я придумал эту команду:

list_files <- list.files(directory, pattern = ".*\\000|010", full.names = TRUE)

Этот код дает мне то, что я хочу, но я не совсем понимаю, что происходит с аргументом шаблона. Как работает pattern = .*\\\000?

Ответы

Ответ 1

\\0 - это обратная ссылка, которая вставляет все регулярное выражение в эту точку. Сравните это, чтобы увидеть, что это может означать:

sub("he", "", "hehello")
## [1] "hello"
sub("he\\0", "", "hehello")
## [1] "llo"

С такими строками, как "001.csv" или "009.csv", происходит то, что .* соответствует нулевым символам, а \\0 повторяет эти нулевые символы один раз, а 00 соответствует первым двум нулям в строке, Успех!

Этот шаблон не будет соответствовать "100.csv" или "010.csv", потому что он не может найти что-либо, что соответствует удвоению, а затем сразу же следуют два 0 s. Он будет, но соответствует "1100.csv", потому что он соответствует 1, затем удваивает его, а затем находит два 0 s.

Итак, чтобы recap, ".*\\000" соответствует любой строке, начинающейся с xx00, где x обозначает любую подстроку с нулем или более символов. То есть, он соответствует чему-то повторенному дважды, а затем следуют два нули.