使用正则表达式过滤日期

时间:2014-11-28 18:27:42

标签: python regex date

有多个字符串,如下所示

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

正则表达式包括2013年12月的所有字符串将如下所示

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

是否有一些工具/脚本/库/ codereceipe可以帮助构建这样的正则表达式给定的日期范围?不幸的是,它必须是一个正则表达式,因为它是一些配置文件的一部分。为每个日期手动编写正则表达式是一件痛苦的事情,很难做到正确。此外,自动化工具可能会生成更短的正则表达式而不是手动编写的正则表达式。

注意:

  1. 假设字符串已经是有效日期,并且始终以固定格式显示。没有必要在正则表达式中验证日期。

2 个答案:

答案 0 :(得分:0)

尝试使用这两个正则表达式

从12月开始,每年2013年以后

regExp = r'trunk.20 [1-9] [3-9] .12' 和

除此之外的所有月份,这也适用于2013年以上的所有月份。

regExp = r'trunk.20 [1-9] [3-9]。[0 [1-9] | [10-12]]'

注意'trunk.20 [1-9] [3-9]。[0 [1-9] | [10-12]]'这将匹配您的所有日期,如果您需要在2013年12月之后的具体日期然后它需要改变。

>>> 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>
>>>

答案 1 :(得分:0)

我认为如果你必须使用正则表达式,你必须明确......

由于日期越来越多,至少需要

  • 一个月内的一份陈述
  • 一年内的两份陈述
  • 或三年超过一年。

对于年,月,日的数字范围,您可以使用range-regexRegEx_for_range。这可能是你正在寻找的。