gpt4 book ai didi

Java - 使用多正则表达式从字符串中提取 JSON 值

转载 作者:行者123 更新时间:2023-12-01 17:40:11 27 4
gpt4 key购买 nike

我正在尝试使用this multi regex java library从字符串中提取 JSON 字段值。

我的 JSON 看起来像这样:

{
"field1": "something",
"field2": 13
"field3": "some"
}

我创建了一个正则表达式模式来适应每个字段,并且它通过简单地为每个模式执行如下操作来与 Java Regex 模式一起使用:

Matcher matcher = patternToSearch.matcher(receiveData);
if (matcher.find()) {
return matcher.group(1);
}

我决定尝试改进代码并使用多正则表达式,这样它就不会扫描字符串 3 次,而是只扫描一次并提取所有需要的值。

所以我想出了这样的东西:

String[] patterns = new String[]{
"\"field1\":\\s*\"(.*?)\"",
"\"field2\":\\s*(\\d+)(\\.\\d)?",
"\"field3\":\\s*\"(.*?)\"",
};
this.matcher = MultiPattern.of(patterns).matcher();

matcher 只有一种方法 - match - 使用方式如下:

int[] match = this.matcher.match(jsonStringToScan);

所以我最终得到了一个整数列表,但我不知道如何从这些字符串中获取 json 值以及这些整数如何帮助我。多正则表达式 matcher 不支持我之前使用的 group 方法来获取值。

知道如何使用多正则表达式从字符串中提取多个 json 值吗? (仅扫描一次字符串)

最佳答案

github page from your link 中所述match 返回匹配模式的索引。此页面的另一点:

The library does not handle groups.

也考虑将 key 作为组进行匹配。看这个简单的例子:

    final Pattern p = Pattern.compile("\"(field.)\":((?:\".*?\")|(?:\\d+(?:\\.\\d+)?))");
final Matcher m = p.matcher("{\"field3\":\"hi\",\"field2\":100.0,\"field1\":\"hi\"}");
while (m.find()) {
for (int i = 1; i <= m.groupCount(); i++) {
System.out.print(m.group(i) + " ");
}
System.out.println();
}

它打印:

field3 "hi" 
field2 100.0
field1 "hi"

如果你想避免值组中的引号,你需要更复杂的逻辑。我停在:

        final Pattern p = Pattern.compile("\"(field.)\":(?:(?:\"(.*?(?=\"))\")|(\\d+(?:\\.\\d+)?))");

结果

field3 hi null 
field2 null 100.0
field1 hi null

关于Java - 使用多正则表达式从字符串中提取 JSON 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60967014/

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