微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

RegEx匹配用逗号分隔的字符串中的元素,而忽略双引号,大括号和方括号内的逗号

如何解决RegEx匹配用逗号分隔的字符串中的元素,而忽略双引号,大括号和方括号内的逗号

我有一个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":2}]
"D":{"1":1,10]}

如果字符串如下所示

String str = [1,{"A":1,"B":2},[19,10,11,"B":2}],100]

那么元素应该是

1
2
{"A":1,"B":2}
[19,"B":2}]
100

解决方法

由于它是一个json字符串,您可以使用对象映射器对其进行解析,并将其作为哈希图中的键值对获取。

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,AB,{1={1=2,2=[1,2=2}]
D={1=1,2=[{1=1,2=2,3=3},10]}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。