2015-01-07 49 views
14

Ben list.files() ile oynamak ve ben 010.csv içinden sadece listeye 001.csv istedi ve ben bu komutla geldi:Amacı nedir? * \?

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

Bu kod Bana istediğimi verir ama ben tam ne olup bittiğini anlamıyorum desen argümanı ile. pattern = .*\\\000 nasıl çalışır?

+3

Bu komuta nasıl geldiniz? Şok yaptım işe yaradı. Ne kadar spesifik olmanız gerektiğine bağlı olarak "00 \\ d \\. Csv | 010 \\. Csv" 'gibi bir şey düşünürdüm. – Gregor

+0

"\\ 0" ın geçerli bir regex escapementi olduğunu düşünmedim, sadece "0" –

+1

Gregor olarak kabul edilmediyse, 00 *, 0 * 0, * 00 varyasyonları ile başladım. hakkında bir şeyler okuyun. Onunla uğraştım. * Gerçekten ne yaptığını bilmeden. Bu sadece benim için işe yaradı. – Chris

cevap

14

\\0 tüm normal ifade ile bu noktaya eklenen bir geri tepkisidir. anlamına neler yapabileceğini görmek için aşağıdaki Karşılaştır:

"001.csv" veya "009.csv" gibi dizeleri ile
sub("he", "", "hehello") 
## [1] "hello" 
sub("he\\0", "", "hehello") 
## [1] "llo" 

ne olur .* maçlar karakterleri sıfır yani \\0 o sıfır karakterleri bir kez tekrarlar ve 00 ilk iki maçları dizede sıfırlar. Başarı!

Bu model o iki katına ve daha sonra hemen iki 0 s izler maç için bir şey bulamıyorum değil maçın "100.csv" veya "010.csv" çünkü. Bu ,olsa daile eşleşir, çünkü 1 eşleşir, sonra iki katına çıkar ve sonra iki 0 s bulur.

Özetle,,ile başlayan herhangi bir dizgiyle eşleşir, burada x, sıfır veya daha fazla karakterden oluşan herhangi bir alt dizeyi temsil eder. Yani, iki kere tekrarlanan ve iki sıfır ile oyulmuş olan bir şeyle eşleşir.

+1

' 100.c' adlı bir dosya, "". * 00 "ile eşleştirildi '' ancak. * \\ 000 '' ile eşleşmiyor. Yani '\\ 0' bazı etkiye sahiptir. – unutbu

+0

Bu sınama dizesiyle oynuyordum: "c (" 001.csv "," 008.csv "," 007.csv "," 009.csv "," 010.csv "," 011.csv ", "101.csv", "110.csv", "100.csv") – Gregor

+0

@unutbu - Tamam, o yararlı işaretçi ile, ben bunu anladım düşünüyorum. Teşekkürler. –