日期范围的正则表达式

时间:2011-07-27 06:01:02

标签: regex grep range

如果我有这样的目录结构

yyyy/dd/mm/<files>

有没有办法使用正则表达式在给定时间范围内为所有文件中的字符串进行grep?例如,我有一个时间框架:2010/12/25 - 2011/01/01,我需要grep对应于日期从12月25日到1月1日的目录中的所有文件

如果我以编程方式执行此操作,是否最好迭代日期范围和每个yyyy / dd / mm目录中的grep文件,而不是使用正则表达式执行此操作?或者它不会有所作为?

1 个答案:

答案 0 :(得分:14)

在你的情况下,它很简单:

\b(?:2010/12/(?:3[01]|2[5-9])|2011/01/01)\b

将匹配包含您指定范围内的日期的字符串。但一般来说,正则表达式不适合匹配日期范围。它总是有可能,但很少是好的。

例如,对于2003/04 / 25-2011 / 04/04的范围,你得到

\b(?:
2003/04/(?:30|2[5-9])|
2003/(?:(?:0[69]|11)/(?:30|[12][0-9]|0[1-9])|(?:0[578]|1[02])/(?:3[01]|[12][0-9]|0[1-9]))|
2011/04/0[1-4]|2011/(?:02/(?:[12][0-9]|0[1-9])|0[13]/(?:3[01]|[12][0-9]|0[1-9]))|
(?:2010|200[4-9])/(?:02/(?:[12][0-9]|0[1-9])|(?:0[469]|11)/(?:30|[12][0-9]|0[1-9])|(?:0[13578]|1[02])/(?:3[01]|[12][0-9]|0[1-9]))
)\b

如果我必须做这样的事情(并且不能在文件属性中使用创建日期),我会使用RegexMagic(创建日期范围正则表达式)和PowerGREP(进行grepping)如果它是一次性工作,但这些仅适用于Windows。如果我不得不经常这样做,我会编写一个小的Python脚本,遍历我的目录树,解析每个目录的日期,检查它是否在范围内,然后查看该目录中的文件。