【问题标题】:Using regular expression in Java to extract date from string in the format 01OCT12 14:26在 Java 中使用正则表达式从 01OCT12 14:26 格式的字符串中提取日期
【发布时间】:2013-06-09 19:56:02
【问题描述】:

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

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

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

【问题讨论】:

  • 字符串在哪里?任何地方?
  • 我试图提供一个详细的解释;希望它有所帮助。由于您是新手,请查看:the tour。祝你好运。

标签: java regex date


【解决方案1】:

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

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

(我假设01 是年份,12 是日期,但如果颠倒过来,则需要颠倒日期格式字符串中的yydd。)

【讨论】:

  • 谢谢,是的,我知道,它就在开头,所以我可以获取一个子字符串并尝试解析它。
【解决方案2】:

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

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

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

【讨论】:

  • 谢谢,正则表达式可能不是最有效的方法,但你已经满足了我的好奇心。
  • 没问题。如果你还没有签出the tour,你应该。 SO 是一个很棒的源站点。
猜你喜欢
  • 2016-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多