java - 正则表达式匹配以逗号分隔的字符串中的元素,忽略双引号、大括号和方括号内的逗号
问题描述
我的string
值如下
String str = {"A":"do not seperate,value","B":"OPM","C":[1,2,"AB",{"1":{"1":2,"2":[1,2]},"2":2}],"D":{"1":1,"2":[{"1":1,"2":2,"3":3},9,10]}};
如何编写正则表达式来捕获由逗号分隔的元素,这些元素不在双引号、方括号或大括号内?我想通过执行以下操作来匹配并获取元素;使用模式匹配。
List<String> list = new ArrayList<>();
Pattern pattern = Pattern.compile(regex);
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
list.add(matcher.group());
}
元素应该是,
"A":"do not seperate,value"
"B":"OPM"
"C":[1,2,"AB",{"1":{"1":2,"2":[1,2]},"2":2}]
"D":{"1":1,"2":[{"1":1,"2":2,"3":3},9,10]}
如果字符串如下所示
String str = [1,2,{"A":1,"B":2},[19,10,11,{"A":1,"B":2}],100]
那么元素应该是
1
2
{"A":1,"B":2}
[19,10,11,{"A":1,"B":2}]
100
解决方案
由于它是一个 json 字符串,您可以使用对象映射器对其进行解析,并将它们作为键值对获取到 hashmap 中。
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.util.*;
import org.json.JSONObject;
public class Test {
public static void main(String args[]) throws IOException {
String str = "{\"A\":\"do not seperate,value\",\"B\":\"OPM\",\"C\":[1,2,\"AB\",{\"1\":{\"1\":2,\"2\":[1,2]},\"2\":2}],\"D\":{\"1\":1,\"2\":[{\"1\":1,\"2\":2,\"3\":3},9,10]}}";
JSONObject obj = new JSONObject(str);
HashMap<String, Object> result = new ObjectMapper().readValue(str, new TypeReference<Map<String, Object>>() {
});
result.entrySet().stream().forEach(System.out::println);
}
}
输出
A=do not seperate,value
B=OPM
C=[1, 2, AB, {1={1=2, 2=[1, 2]}, 2=2}]
D={1=1, 2=[{1=1, 2=2, 3=3}, 9, 10]}
推荐阅读
- java - 如何在 Hibernate 中将查询超时设置为小于 1 秒?
- tensorflow - TensorFlow 中稀疏卷积的替代实现
- javascript - ReactSelect - 允许区分大小写的可创建选项
- c# - 测试 MVC 控制器方法的属性数量
- json - 使用 filebeat 记录 - 将 JSON 提取到 ES 文件
- javascript - 如何创建具有自定义模板但功能相同的 Vue 组件而不重复自己?
- flutter - 如何使用 Flutter for Web 从本地文件中读取内容?
- powershell - 如何通过 Powershell 在 Windows 容器中使用环境变量
- c++ - 如何在 Leap Motion 上检测用于相机校准的棋盘?
- caching - 需要在 Ignite 缓存 ExpiryPolicy 之前执行代码