【问题标题】:Regex to extract date, month and year seeparately from dd/mm/yy and month dd, yyyy正则表达式分别从 dd/mm/yyyy 和月份 dd、yyyy 中提取日期、月份和年份
【发布时间】:2016-02-05 08:30:14
【问题描述】:

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

Monday, Sep 1, 2014 10:00 AM

和

01/09/14

这样我就有了日(01)、月(09)和年(2014)

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

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

我没有提取年份的运气,而且我完全不知道如何提取月份。 请帮忙。

【问题讨论】:

  • 您使用哪种编程语言?
  • 正则表达式如何知道Sep 是一个月?

标签: regex datetime


【解决方案1】:

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

如果是“2014 年 9 月 1 日星期一”格式,捕获组将是:

1: Sep
3: 1
4: 2014

对于“01/01/14”,它们将是:

2: 01
3: 01
4: 14

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

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

Debuggex Demo

解释:

  1. 从字符串开始
  2. 跳过可选的工作日
  3. A:跳过“,”,然后取 3 个字母的月份
  4. B:取第一个数字
  5. 跳过“”或/
  6. 取第二个数字(“Sep 1”中的 1)
  7. 跳过/或“,”
  8. 取 2-4 年代码

【讨论】:

  • 您能否建议如何使用 SimpleDateFormat 使用此正则表达式解析日期?
【解决方案2】:

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

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

Regex Demo

这里的主要部分是数字仅限于各自的数字。 IE。一年只能是 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

【讨论】:

    【解决方案3】:

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

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

    只要您确定日期输出的格式即可。

    【讨论】:

      猜你喜欢
      • 2021-11-17
      • 2021-10-19
      • 1970-01-01
      • 2021-10-14
      • 2017-07-10
      • 1970-01-01
      • 2019-10-12
      • 1970-01-01
      • 2020-10-23
      相关资源
      最近更新 更多