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

使用Java正则表达式(Regex)提取字符串中的两组日期时间

嘿,这需求我熟!我帮你写了个Java正则方案,完美适配你列出的所有日期时间格式,还支持所有英文月份,直接就能用~

解决方案

正则表达式设计

首先得覆盖你提到的三种场景:带完整月份日期的格式、跨月的完整格式,以及仅含时间的格式。对应的正则表达式如下:

^((?:(January|February|March|April|May|June|July|August|September|October|November|December) \\d{1,2} )?\\d{1,2}:\\d{2} (?:AM|PM)) 和 ((?:(January|February|March|April|May|June|July|August|September|October|November|December) \\d{1,2} )?\\d{1,2}:\\d{2} (?:AM|PM))$

正则细节说明

  • (?:(月份列表) \d{1,2} )?:用?标记这部分为可选,对应仅时间的场景;非捕获分组(?:...)避免生成多余的分组结果
  • \d{1,2}:\d{2}:匹配1-2位小时+冒号+2位分钟的标准时间格式
  • (?:AM|PM):匹配上午/下午标识,同样用非捕获分组减少干扰
  • 和:精准匹配你指定的中文分隔符(注意两边的空格)
  • ^和$:锚定字符串首尾,确保整个字符串都符合格式,避免部分匹配

如果需要支持月份缩写(比如Mar代替March),可以把月份部分替换为:

(Jan(?:uary)?|Feb(?:ruary)?|Mar(?:ch)?|Apr(?:il)?|May|Jun(?:e)?|Jul(?:y)?|Aug(?:ust)?|Sep(?:tember)?|Oct(?:ober)?|Nov(?:ember)?|Dec(?:ember)?)

Java代码实现

下面是完整的可运行代码,包含你给出的所有测试用例:

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class DateTimeExtractor {
    public static void main(String[] args) {
        // 预编译正则表达式,提升重复匹配的性能
        String regex = "^((?:(January|February|March|April|May|June|July|August|September|October|November|December) \\d{1,2} )?\\d{1,2}:\\d{2} (?:AM|PM)) 和 ((?:(January|February|March|April|May|June|July|August|September|October|November|December) \\d{1,2} )?\\d{1,2}:\\d{2} (?:AM|PM))$";
        Pattern pattern = Pattern.compile(regex);

        // 测试你提供的示例字符串
        String[] testCases = {
            "March 9 12:31 AM 和 March 10 7:30 AM",
            "March 11 7:30 AM 和 March 12 10:30 AM",
            "March 31 9:00 PM 和 April 1 12:39 AM",
            "March 31 10:11 PM 和 April 1 5:23 AM",
            "7:45 PM 和 10:30 PM"
        };

        for (String input : testCases) {
            Matcher matcher = pattern.matcher(input);
            if (matcher.matches()) {
                // 提取两组日期时间:group(1)是第一组,group(3)是第二组
                String firstDateTime = matcher.group(1).trim();
                String secondDateTime = matcher.group(3).trim();
                System.out.println("输入字符串:" + input);
                System.out.println("提取的第一组:" + firstDateTime);
                System.out.println("提取的第二组:" + secondDateTime);
                System.out.println("------------------------");
            } else {
                System.out.println("⚠️ 该字符串不符合格式:" + input);
            }
        }
    }
}

代码说明

  • 用Pattern.compile()预编译正则,避免重复编译浪费性能
  • Matcher.matches()确保整个字符串完全匹配正则规则
  • 通过group(1)和group(3)提取目标结果(group(2)和group(4)是可选的月份分组,不需要)

运行这段代码后,会精准输出每个测试用例的两组日期时间,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:14:36