java - Java - 使用多正则表达式从字符串中提取 JSON 值
问题描述
我正在尝试使用这个多正则表达式 java 库从字符串中提取 JSON 字段值。
我的 JSON 看起来像这样:
{
"field1": "something",
"field2": 13
"field3": "some"
}
我创建了一个正则表达式模式来适应每个字段,它通过简单地为每个模式执行类似的操作来使用 Java 正则表达式模式:
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 页面 match
所述,返回匹配模式的索引。此页面的另一点:
该库不处理组。
也考虑将键匹配为组。看这个简单的例子:
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
推荐阅读
- javascript - 如何将数据表集成到左栏 Web 部件中?
- python - 无法运行 Py_Initialize(),应用程序以代码 -1073741191 退出
- spring-cloud-sleuth - 使用 B3 / Zipkin 和 Spring Cloud Sleuth 传播行李
- python - 使用 Lambda 函数中的 SSM 在 EC2 实例上执行 python 脚本
- c# - 如果识别到意图,如何运行 CMD 并从 bot azure 程序插入命令?
- julia - Julia:为什么岭回归不起作用(优化)
- date - SAS - 我如何读取日期数据?
- cypress - 赛普拉斯自定义命令 - 从 .each() 循环中中断并返回一个值以在后续步骤中使用
- c# - 部分 Ping 任务从未完成
- python - 如何划分两个不同数据帧的列,而其他两个列中的值相同?