Java正则表达式匹配日期用点分隔

时间:2018-07-11 17:02:37

标签: java regex date

我有以下正则表达式  [\d\\d[.]\d\d[.]\d\d][\\d\\d\\.\\d\\d\\.\\d\\d].* 他们既可以正确地匹配带日期的行,又可以匹配不包含日期但只包含数字(和文本)的行。

我的文本格式如下:

12.04.18, 15:59 - A: xyz
12345 abc
12.04.18, 16:00 - B: cde
abc 12345

我希望正则表达式匹配第1行和第3行

2 个答案:

答案 0 :(得分:0)

您需要转义句点字符,因为它在正则表达式中被视为通配符。另外,您在不需要的地方使用Character Class。字符类用方括号指示,并用于列出该位置可接受的字符的列表。使用此正则表达式签出:

\d\d\.\d\d\.\d\d.*$

Demo Here

说明

  • \d搜索您知道的数字
  • \.寻找字母.,而不是将句点作为通配符的正则表达式解释
  • .*用于匹配日期匹配后的其余行
  • $表示行的结尾,请确保我们已匹配整行。

答案 1 :(得分:0)

通常的建议是不要使用正则表达式来验证日期时间字符串,而应使用标准库中的日期时间格式化程序。在您的情况下,这可能不是绝对必要的,但我想将它作为一种选择提供给您和所有阅读者。

    DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.uu, H:mm");
    String[] lines = {
            "12.04.18, 15:59 - A: xyz",
            "12345 abc",
            "12.04.18, 16:00 - B: cde",
            "abc 12345"
    };
    for (String line : lines) {
        ParsePosition pos = new ParsePosition(0);
        try {
            LocalDateTime dateTime = LocalDateTime.from(formatter.parse(line, pos));
            System.out.println("Match. Date-time is " + dateTime 
                    + ". Remainder of line is: " + line.substring(pos.getIndex()));
        } catch (DateTimeParseException dtpe) {
            System.out.println("No match. Line was: " + line);
        }
    }

上面的代码段打印出来:

Match. Date-time is 2018-04-12T15:59. Remainder of line is:  - A: xyz
No match. Line was: 12345 abc
Match. Date-time is 2018-04-12T16:00. Remainder of line is:  - B: cde
No match. Line was: abc 12345

潜在的优势包括:

  • 它可以更严格地验证数字是否构成有效的日期和时间。
  • 从代码中可以更清楚地看到日期时间。正则表达式要正确读取和写入要复杂一些。
  • 您将日期和超时作为日期时间对象获取,以便在需要时进行进一步处理时很方便。