1

我希望从 01OCT12 14:26 格式的文件或字符串中读取日期

我知道日期将是 OCT 月或 NOV 月,这可能有助于我编写更精确的正则表达式。

我已经阅读了 Java 提供的许多使用正则表达式的选项,例如 Matcher & Pattern 以及 Scanner 类,并希望能帮助我找到解决这个问题的最干净的方法。

4

2 回答 2

5

如果您知道日期在字符串中的哪个位置,则可以使用SimpleDateFormatfor 解析而不是使用正则表达式:

DateFormat dateFormat = new SimpleDateFormat("yyMMMdd kk:mm", Locale.ENGLISH);
Date result = df.parse(stringDate);  

(我假设那01是年和12日,但如果它颠倒了,那么你需要颠倒日期格式字符串中的yyand 。)dd

于 2013-06-09T19:57:56.203 回答
0

以下是使用正则表达式的方法,并举个例子:

        String example = "01OCT12 14:26";
        String pattern = "^(\\d{2})(?:OCT|NOV)(\\d{2}) (\\d{1,2}):(\\d{2})$";

        Pattern p = Pattern.compile(pattern);
        Matcher m = p.matcher(example);

        if (m.find()) 
        {
            //prints example
            System.out.println(m.group());

            System.out.println(m.group(1)); //prints 01
            System.out.println(m.group(2)); //prints 12
            System.out.println(m.group(3)); //prints 14
            System.out.println(m.group(4)); //prints 26
        }

"^(\\d{2})(?:OCT|NOV)(\\d{2}) (\\d{1,2}):(\\d{2})$"分解:

  • ^手段以
  • (...)是一个捕获组,这意味着这...是您要捕获的模式
    • 在这种情况下,模式是\\d{2},这意味着任何数字中的两个[0-9]
  • (?:OCT|NOV)
    • ?:表示不捕获以下内容
    • OCT|NOV表示必须是 OCT 或 NOV
  • (\\d{1,2})是匹配 1 个或 2 个数字的捕获组[0-9]
  • 最后,$手段以

您可能不想使用正则表达式来完成此任务;尽管如此,我相信这就是你想要的。

于 2013-06-09T20:37:15.070 回答