Регулярное выражение для диапазона дат - PullRequest
9 голосов
/ 27 июля 2011

Если у меня есть структура каталогов, подобная этой

yyyy/dd/mm/<files>

Есть ли способ поиска строки во всех файлах за определенный период времени с использованием регулярного выражения?Например, у меня есть временные рамки: 2010/12/25 - 2011/01/01, мне нужно выполнить grep всех файлов в каталогах, соответствующих датам с 25 декабря по 1 января

Если я делаю это программнолучше ли перебирать диапазон дат и файлы grep в каждом каталоге yyyy / dd / mm, чем использовать для этого регулярное выражение?Или это не имеет значения?

1 Ответ

15 голосов
/ 27 июля 2011

В вашем случае это достаточно просто:

\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 (для выполнения поиска), если это одноразовая работа, но онидоступны только в Windows.Если бы мне приходилось делать это чаще, я бы написал небольшой скрипт на Python, который просматривал мое дерево каталогов, анализировал дату для каждого каталога, проверял, находится ли он в диапазоне, а затем просматривал файлы в этом каталоге.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...