2013-01-16 76 views
1

我跑list.files模式參數,擴展正則表達式使用

dir.create('./junk_data') 
    file.create(paste('./junk_data/QWE',01:12,01:31,2005:2015,'.3',sep='')) 
    file.create(paste('./junk_data/RTY',01:12,01:31,2005:2015,'.3',sep='')) 

,並要列出所有QWE年底開始2011.3的文件。我試圖

list.files('./junk_data/',pattern='QWE....2011.3',full.names=T) 

list.files('./junk_data/',pattern='QWE....2011.3',full.names=T,perl=T) 

,但我想'.'並不意味着一個我在想什麼,因爲我沒有得到我想要的文件。

我試了幾個關於正則表達式的教程,但沒有喜悅。

+1

01是1,因此01:12爲1,2,... 12.也許你想要做的事,比如'sprintf的( 「%02D」,1:12)' – kohske

回答

9

正如Arun在他的例子中顯示的那樣,點通常意味着「匹配任何字符」,所以要匹配一個點就需要逃避它:\\.。您可以使用glob2rx最容易地創建模式,該模式使用*作爲通配符,並匹配其他字符,就好像它們是固定的。

glob2rx("QWE*2011.3") #"^QWE.*2011\\.3$" 
list.files("./junk_data/", pattern = glob2rx("QWE*2011.3"), full.names = TRUE) 
+0

感謝偉大的工作。 – Yoda