python正则表达式日期格式,仅在2012年查找日期

时间:2012-08-13 23:54:22

标签: python regex date

  

可能重复:
  python regex, date format

我正在写一个正则表达式来查找所有日期,如“6月27日”

与此同时,我只想在2012年“6月27日”而不是其他任何一年

所以“6月27日”在“2007年6月27日”不应该找到,但是正则表达式确实抓住了“6月27日”

正则表达式编写如下,

((?<!\w)(january|february|march|april|may|june|july|august|september|october|november|december|jan|feb|mar|apr|may|jun|jul|aug|sep|sept|oct|nov|dec)[\.]?\s{1,3}?((?<!(\d|:))(1[0-9]|2[0-9]|3[0-1]|0?[1-9])(st|nd|rd|th)?(?!(\d|\s{0,3}am|s\{0,3}pm|:)))(\s{0,2},?\s{0,2}(2012))?(?!(\d|\s{0,4},?\s{0,2}(1\d\d\d|200\d|2010|2011))))

如果我取消“27th”中的“th”,则正则表达式起作用,即它不会捕获日期字符串。

任何人都可以提供帮助吗?

1 个答案:

答案 0 :(得分:0)

假设您的所有日期都在您的给定语法中,一个简单的正则表达式将是:

/^([^\d\s]+?)\s*(\d+)[stndrh]+,\s*2012$/

第一个捕获组以语言或缩写捕获月份,第二个捕获组保留月份的日期。

或者,如果您必须在长文本中匹配所有内容,请尝试以下内容:

/(?:([a-z]{3,9})\s*(\d{1,2})[stndrh]{2},\s*2012)/

相同的捕获但正则表达式更具限制性,因此它不会意外地匹配不需要的结果。