正则表达式从dd / mm / yyyy和月dd分别提取日期,月份和年份,yyyy

时间:2014-11-14 13:51:49

标签: regex datetime

我需要从两个日期中提取日期信息:

Monday, Sep 1, 2014 10:00 AM

01/09/14

这样我有日(01),月(09)和年(2014)

我能够用这个正则表达式提取日期(01):

\s+.*?(\d+)\/*,*

我在提取年份方面没有运气,而且我对如何提取月份完全无能为力。 请帮助。

3 个答案:

答案 0 :(得分:1)

这是一个组合的正则表达式。你可以从中获得两种形式。

如果它" 2014年9月1日星期一"格式化捕获组将是:

1: Sep
3: 1
4: 2014

和#34; 01/01/14"他们将:

2: 01
3: 01
4: 14

只检查第二组是否存在,以检查该值是否为第二种格式:

^\w*(?:, (\w{3})|(\d{2}))[\/ ]\s*(\d{1,2})(?:/|, )(\d{2,4})

Regular expression visualization

Debuggex Demo

说明:

  1. 从字符串开始
  2. 开始
  3. 跳过可选的工作日
  4. A:跳过","然后拿3个字母的月份
  5. B:取第一个号码
  6. 跳过" "或/
  7. 取第二个数字(1" 9月1日和#34;)
  8. 跳过/或","
  9. 需要2 - 4年的代码

答案 1 :(得分:1)

可以使用以下内容提取第一个日期:

\w+,\s\w+\s\d{1,2},\s\d{4}\s\d{2}:\d{2}\s(?:AM|PM)

Regex Demo

这里的主要部分是数字仅限于数字。即。一年只能是4位数,月/日只能是2位数。如果需要,您可以更进一步,但这通常足以防止您正在解析的数据中出现任何误报。

可以像下面这样提取第二个日期:

\d{2}/\d{2}/\d{2}

同样,日期的各个部分限制为两位数,以尝试减少误报的数量。如果数据中存在其他日期格式,则会捕获误报。在这种情况下,需要更多限制。还有一些你可以做的事情,但这实际上取决于你的数据。

Regex Demo

然后,如果您想要合并两个正则表达式,一种方法是执行以下操作:

(?:\w+,\s\w+\s\d{1,2},\s\d{4}\s\d{2}:\d{2}\s(?:AM|PM)|\d{2}\/\d{2}\/\d{2})

Regex Demo

答案 2 :(得分:0)

您可以使用以下方式从第一个日期提取数据: (.+),\s(\.+)\s(\d+),.*

从第一个日期开始使用: (\d+)\/(\d+)\/(\d+)

如果您确定日期输出的格式。