2013-01-16 147 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