在使用list.files匹配非常特定的模式时,我遇到问题。我有一组具有这种模式“ namefile_YYYY-mm-dd.csv” 的文件,但是,如果一个文件生成了多次,那么我将得到类似的内容: namefile_YYYY-mm-dd_something-else.csv“ 。这就是我用的:
list.files(path = "\\projects\\datasets", pattern = "^Participants_(.*)csv$",all.files = FALSE, full.names = FALSE, recursive = FALSE)
这是输出: “参加者_2018-07-18.csv” “参加者_2018-07-19.csv” “参加者_2018-07-21.csv” “参加者_2018-07-28.csv” “参与者_2018-08-04 new.csv” “参加者_2018-08-04.csv” “参加者_2018-08-11.csv” “参加者_2018-08-18-for-analysis.csv” “参加者_2018-08-18.csv” “参加者_2018-08-25.csv” “参加者_2018-09-01.csv” “ Participants_2018-09-08.csv”
但是我不想要所有这些。我希望列表中仅包含此格式的名称“ Participants_2018-07-18.csv” ,并排除其他任何格式的名称,例如:“ Participants_2018-08-04 new .csv” ,“参与者_2018-08-18-for-analysis.csv”
我尝试了几件事
list.files(path = "\\projects\\datasets", pattern = "^Participants_[0-9]\\.csv$",all.files = FALSE, full.names = FALSE, recursive = FALSE)]
但列表为空。有什么建议吗?
答案 0 :(得分:0)
通过将Participants_
替换为.*
,可以匹配\\d{4}-\\d{2}-\\d{2}
之后仅包含类似日期模式的那些文件名:
list.files(path = "\\projects\\datasets", pattern = "^Participants_\\d{4}-\\d{2}-\\d{2}\\.csv$",all.files = FALSE, full.names = FALSE, recursive = FALSE)
请参见regex demo。
\d{4}-\d{2}-\d{2}
的正则表达式模式匹配任意四个数字,然后匹配-
和任意两个数字两次。