繁体   English   中英

在Java中使用正则表达式从字符串中提取日期,格式为01OCT12 14:26

[英]Using regular expression in Java to extract date from string in the format 01OCT12 14:26

我正在从文件或字符串中读取日期,格式为01OCT12 14:26

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

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

如果您知道日期在字符串中的何处,则可以使用SimpleDateFormat进行解析,而不要使用正则表达式:

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

(我假设01是年, 12是天,但是如果将其取反,则需要将日期格式字符串中的yydd反。)

下面是使用正则表达式的示例:

        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]匹配的捕获组
  • 最后, $表示以

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM