gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 04:11:26 25 4
gpt4 key购买 nike

我目前在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com