java - 在 JSON 字符串中查找多种日期格式

标签 java regex date

我目前在 Java 工作,我在使用 Regex 匹配 JSON 字符串中的多种日期格式时遇到问题。

JSON:

{"x": "02/23/2019", "y": "02-27-2019"}

正则表达式:

[0-9]{1,2}(/|-)[0-9]{1,2}(/|-)[0-9]{4}

在正则表达式测试器中,此正则表达式匹配两个日期。但是在 Java 代码中,我只能从组中获取一个日期。第二组只是一个“\”。

Java 代码:

private static void findDates() {
    String regex = "[0-9]{1,2}(/|-)[0-9]{1,2}(/|-)[0-9]{4}";
    Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE);
    String json =
            "{\"x\":\"02/23/2019\",\n" +
             "\"y\":\"02-27-2019\"}";
    Matcher matcher = pattern.matcher(json);
    if (matcher.find()) {
        for (int i = 0; i < matcher.groupCount(); i++) {
            String dateMatch = matcher.group(i);
            System.out.println(dateMatch);
        }
        System.out.println(json);
    }
}

我需要能够捕获与正则表达式指定的格式匹配的所有日期。因此,如果 JSON 中恰好有 MM/dd/yyyy 或 MM-dd-yyyy 格式的三个日期,当我遍历这些组时,我应该得到所有三个日期,或所有五个日期,或所有两个日期,等等..

最佳答案

您的代码有点不正确。当您试图找到所有匹配项时,您需要使用 while(matcher.find())。您也可以将 (/|-) 写成 [/-]。查看此 Java 代码。

String regex = "[0-9]{1,2}([/-])[0-9]{1,2}\\1[0-9]{4}";
Pattern pattern = Pattern.compile(regex);
String json = "{\"x\":\"02/23/2019\",\n" + "\"y\":\"02-27-2019\"}";

Matcher matcher = pattern.matcher(json);
while (matcher.find()) {
    System.out.println(matcher.group());
}

打印你的两个日期,

02/23/2019
02-27-2019

注意,我在正则表达式的年份部分之前写了 \\1 而不是 ([/-]) ,所以它不匹配格式的日期, 02-23/201902/23-2019 而只有 02-23-201902/23/2019

此外,在您的代码中,如果您使用 if (matcher.find()),那么匹配器将首先进行查找,而不会在您的字符串中找到更多匹配项,即使其中许多可能确实存在存在。而 matcher.groupCount() 只是动态地为您提供匹配的正则表达式中的组数,您正在使用它来打印所有组捕获,这不是您在程序中的意图。

关于java - 在 JSON 字符串中查找多种日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54871926/

相关文章:

python - 如何使用包含引号和使用多个分隔符的 pandas 读取 CSV 文件

javascript - 仅在字符串的开头/结尾匹配正则表达式

c# - 更新SQL数据库日期列

java - 如何对无限通量进行排序?

regex - 使用 sed 删除从第 n 列开始到下一个非空白区域的所有空白区域

vba - 试图获得两个日期,上个月的 24 日和本月的 23 日

php - 如何使用周数来选择唯一记录ID的MYSQL PHP

java - Android并发: UI thread edit a variable and other thread read the same variable

java - Hibernate 和 Oracle10g : Tomcat times out

java - hashCode/equals 合约的 JUnit 理论