2014-11-28 3 views
-1

Есть несколько строк, как показано нижеФильтр дат с помощью регулярных выражений

trunk.2013.11.13 
trunk.2013.11.17 
trunk.2013.12.31 
trunk.2014.01.05 
trunk.2014.01.07 

Regex включить все строки из дес 2013 будет выглядеть так,

trunk.2013.12...|trunk.201[^123]......|trunk.20[^01]....... 

Есть ли какой-то инструмент/скрипт/библиотека/codereceipe что может помочь создать такое регулярное выражение для заданного диапазона дат? К сожалению, это должно быть регулярное выражение, поскольку оно является частью некоторого файла конфигурации. Написание регулярного выражения вручную для каждой даты - это боль и трудно получить право. Кроме того, автоматизированный инструмент может генерировать более короткое регулярное выражение вместо написанного вручную.

Примечание:

  1. Предположим, что строки уже действительные даты и всегда появляются в определенном формате. Нет необходимости проверять даты в регулярном выражении.
+0

Почему бы не проанализировать ввод (как есть допустимые даты) в качестве дат и выполнить сравнение '> =' с датой из файла конфигурации? – wenzul

+0

Программа, которая считывает файл конфигурации, не входит в мой контроль. Я только пишу/создаю конфигурационный файл – balki

ответ

0

Я думаю, если вы должны использовать регулярное выражение, вы должны быть явными ...

Поскольку дата увеличивается, необходимо, по крайней мере

  • один заявление в течение одного месяца
  • два заявления в течение одного года
  • или три в течение более одного года.

Для диапазонов номеров год, месяц и день вы можете использовать range-regex или RegEx_for_range. Это может быть то, что вы ищете.

+0

Спасибо. Это было близко. Я попытаюсь обернуть его по датам – balki

0

Попробуйте с этими двумя регулярными выражениями

Для дек месяц, каждый год 2013 года

РегВыр = r'trunk.20 [1-9] [3-9] +0,12' и

за все месяцы кроме того, это также применимо для всех месяцев в течение всего года более чем 2013.

РегВыр = r'trunk.20 [1-9] [3-9]. [0 [1- 9] | [10-12]] '

Note 'trunk.20 [1-9] [3-9]. [0 [1-9] | [10-12]]' Это будет соответствовать всем вашим датам. Если вам нужны конкретные даты после dec 2013, Его нужно изменить.

>>> import re 
>>> regExp = r'trunk.20[1-9][3-9].[0[1-9]|[10-12]]' 
>>> srchObj = re.search(regExp,'trunk.2013.11.13') 
>>> print srchObj 
<_sre.SRE_Match object at 0x01AE2B80> 
>>> srchObj = re.search(regExp,'trunk.2013.11.17') 
>>> print srchObj 
<_sre.SRE_Match object at 0x01AE2BB8> 
>>> srchObj = re.search(regExp,'trunk.2013.12.31') 
>>> print srchObj 
<_sre.SRE_Match object at 0x01AE2B80> 
>>> srchObj = re.search(regExp,'trunk.2014.01.05') 
>>> print srchObj 
<_sre.SRE_Match object at 0x01AE2BB8> 
>>> srchObj = re.search(regExp,'trunk.2014.01.07') 
>>> print srchObj 
<_sre.SRE_Match object at 0x01AE2B80> 
>>> 
Смежные вопросы