5

I run

  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=''))

and want to list all the files that begin with QWE and end with 2011.3. I tried

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

and

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

but I guess '.' doesn't mean one what I think, as I get none of the files I want.

I tried a few tutorials on regex, but no joy.

jordanm
  • 33,009
  • 7
  • 61
  • 76
Yoda
  • 397
  • 5
  • 18
  • 1
    01 is 1 so 01:12 is 1, 2, ... 12. Perhaps you want to do something like `sprintf("%02d", 1:12)` – kohske Jan 16 '13 at 14:09

1 Answers1

16

As Arun showed in his example, a dot usually means "match any character", so to match a dot you need to escape it: \\.. You can create the pattern most easily with glob2rx, which uses * as a wildcard and matches other characters as though they are fixed.

glob2rx("QWE*2011.3")   #"^QWE.*2011\\.3$"
list.files("./junk_data/", pattern = glob2rx("QWE*2011.3"), full.names = TRUE)
Richie Cotton
  • 118,240
  • 47
  • 247
  • 360