You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求可匹配多格式日期时间的完整正则表达式

匹配多种日期时间格式的正则表达式需求

当前使用的正则表达式

public const string DateTimeRegex = @"\b(?<datetime>" +
        // Date part
        @"((" +
            @"(\d{1,2}[\/\-\.]\d{1,2}[\/\-\.]\d{2}(\d{2})?)" +
            @"|(\d{1,2}\s+(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-zA-Z]*,?\s+\d{2}\d{2}?)" +
            @"|((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-zA-Z]*\s+\d{1,2},?\s+\d{2}\d{2}?)" +
            @"|(\d{4}\-\d{1,2}-\d{1,2})" +
        @")" +
        // Optional time part
        @"(" +
            @"[T\s]?\d{1,2}:\d{1,2}(:\d{1,2}(\.\d+)?)?(([AP]M)|([\+\-][12]?\d:\d{1,2})|Z)?" +
        @")?)"  +
    @")\b";

现有问题

  • 能匹配目标日期,但无法匹配对应的时间部分(仅少数情况可匹配),例如输入带AM/PM的日期时间时,仅能提取出日期部分,时间被遗漏
  • 无法匹配25-Dec-2022这类“日-月份缩写-年”格式的日期
  • 单独用以下正则匹配时间部分可行,但合并后无法正确同时匹配日期和时间:
public const string DateTimeRegex2 = @"(\d{1,2}:\d{1,2}(:\d{1,2}(\.\d+)?)?(([AP]M)|([\+\-][12]?\d:\d{1,2})|Z)?)";

需要支持的目标格式

25-Dec-2022
25-Dec-2022 12:36
25-Dec-2022 12:36 PM
11/17/2022
11/17/2022 12:36
11/17/2022 12:36 PM
1/6/2023
1/6/2023 12:36
1/6/2023 12:36 PM
11/3/2022
11/3/2022 12:36
11/3/2022 12:36 PM
December 10, 2022
December 10, 2022 12:36
December 10, 2022 12:36 PM
January 5, 2023
January 5, 2023 12:36
January 5, 2023 12:36 PM

同时需要兼容其他常见的日期时间格式。

改进后的正则表达式

public const string DateTimeRegex = @"\b(?<datetime>" +
        // 可选的星期前缀
        @"(([A-Za-z]+,?\s+)?)?" +
        // 日期部分:覆盖所有目标格式及常见格式
        @"((" +
            // 日/月/年 或 日-月-年 或 日.月.年(支持2位/4位年)
            @"(\d{1,2}([\/\-\.])\d{1,2}\1\d{2}(\d{2})?)" +
            // 日-月份缩写-年(如25-Dec-2022)
            @"|(\d{1,2}-(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-zA-Z]*-\d{4})" +
            // 日 月份全称/缩写 年(如10 Dec 2022 或 10 December 2022)
            @"|(\d{1,2}\s+(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-zA-Z]*,?\s+\d{2}\d{2}?)" +
            // 月份全称/缩写 日, 年(如Dec 10, 2022 或 December 10, 2022)
            @"|((Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)[a-zA-Z]*\s+\d{1,2},?\s+\d{2}\d{2}?)" +
            // 年-月-日(如2022-12-10)
            @"|(\d{4}\-\d{1,2}-\d{1,2})" +
        @")" +
        // 可选的时间部分:支持空格/T分隔,带秒、毫秒、AM/PM、时区
        @"(\s+|T)\d{1,2}:\d{1,2}(:\d{1,2}(\.\d+)?)?\s*([AP]M)?(([\+\-][12]?\d:\d{1,2})|Z)?)" +
    @"?\b";

修改说明

  1. 添加了可选星期前缀的匹配,支持Saturday, December 10, 2022这类带星期的格式
  2. 新增了日-月份缩写-年格式的匹配规则,覆盖25-Dec-2022这类格式
  3. 调整了时间部分的分隔逻辑:将原有的[T\s]?改为(\s+|T),确保日期和时间之间的空格(包括多个空格)能被正确识别
  4. 优化了AM/PM的匹配逻辑,允许时间和AM/PM之间有空格,解决原正则无法匹配11:36 AM这类格式的问题
  5. 保留了原有的秒、毫秒、时区(Z/偏移量)匹配逻辑,兼容更多时间格式

内容的提问来源于stack exchange,提问作者Katana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 12:55:14