R语言list.files函数匹配月\日\小时格式子目录的正则问题
解决R语言中匹配“两位数字\两位数字\两位数字”目录的正则问题
你的问题出在两个地方:一是R字符串里的反斜杠需要双重转义,二是你原来的正则只匹配了单数字,没指定两位的要求。
先给你直接的解决方案,把正则改成这样就可以了:
list.files("path", pattern = "^[0-9]{2}\\\\[0-9]{2}\\\\[0-9]{2}$", recursive = TRUE, include.dirs = TRUE)
我来拆解下这个正则的关键点:
[0-9]{2}:匹配恰好两位数字,{2}是正则里指定重复次数的语法,比写两次[0-9]更清晰\\\\:在R的字符串中,要表示一个实际的反斜杠\,必须写四个反斜杠——两个用来让R字符串识别为一个转义反斜杠,另外两个用来让正则引擎识别为一个反斜杠(因为正则里反斜杠本身也是转义字符)^和$:这两个是锚点,^匹配字符串开头,$匹配结尾,确保整个目录名完全符合“两位数字\两位数字\两位数字”的格式,不会误匹配到像03\21\11_abc这种包含目标格式的更长目录名
如果你的场景需要更精准的匹配(比如月份只能是01-12,日期01-31,小时00-23),可以用更严格的正则:
list.files("path", pattern = "^(0[1-9]|1[0-2])\\\\(0[1-9]|[12][0-9]|3[01])\\\\([01][0-9]|2[0-3])$", recursive = TRUE, include.dirs = TRUE)
这个正则会过滤掉不符合实际时间范围的目录,比如13\32\25这种无效格式。
内容的提问来源于stack exchange,提问作者La Machine Infernale
相关产品推荐
相关产品推荐

