当前位置: 首页 > 知识库问答 >
问题:

正则表达式匹配由逗号分隔的字符串中的元素,忽略双引号、花括号和方括号中的逗号

祁兴运
2023-03-14

我有一个字符串值,如下所示

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

共有1个答案

许承悦
2023-03-14

因为它是一个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]}
 类似资料:
  • 问题内容: 我有一个像这样的字符串: 上面的字符串应分为: 问题答案: 我认为最简单的解决方案是处理输入字符串char-by-char: 例: 作为免费赠品,此解决方案还根据需要计算嵌套括号: 它还检查括号是否平衡(每个开放的括号都有相应的结束符)。

  • 问题内容: 在我的一个项目中,我不得不处理逗号分隔文件(CSV)。我必须基于逗号来拆分数据,而忽略引号内的逗号(即),因此我使用了另一个堆栈溢出问题(Java:拆分逗号分隔的字符串但忽略了引号中的逗号)中提到的表达式。一切工作都很好,直到最近我才注意到它不适用于下面提到的一种特定情况。 我需要在逗号上拆分的数据字符串为: 以我的理解为基础 拆分后的数据应返回一个大小为10的数组,该数组的后两个索引

  • 我试图匹配,使用正则表达式,所有逗号(后跟一个空格):在任何括号或方括号之外,即逗号不应该包含在括号或方括号中。 目标字符串是。在这种情况下,它应该匹配第一个逗号和最后一个逗号(介于和之间,和)。 所以我可以拆分分成,and,不会因此而使括号/括号不平衡。 为此,似乎很难单独使用正则表达式。有没有其他办法解决这个问题? 我使用的正则表达式: 但是这个表达式将匹配另外两个不应该匹配的逗号(第二个和第

  • 问题内容: 我的文字如下: 谁能告诉我我必须使用哪些正则表达式分度数才能获得以下结果: 我在这里阅读Sun教程,直到“ Matcher类的方法”为止,但我仍然茫然。谢谢! 如果是这样,那将很容易,但是不幸的是,事实并非如此。有任何想法吗? 问题答案: 您可以直接使用split()方法,如下所示: (请注意,这将返回长度为5的数组,第一个位置为空字符串) 或者,如果您想使用模式/匹配器,可以这样做:

  • 上面的正则表达式返回括号之间的文本。 如: 如何重写上面的正则表达式,所以我提供了一个类似的字符串,它将返回。i、 e带括号的部分,其中包含大括号中的字符串。

  • 问题内容: 我有一个像 我想把它分成那些字符串 如果我简单地打电话给我,那么在修剪之后我会得到不同的结果,因为在某些字符串中,例如,仍然有一个逗号。但我不想放在方括号中。有解决这个问题的优雅方法吗? 问题答案: 假设和没有嵌套和未转义。您可以使用以下方式进行拆分: 正则演示 如果逗号后面没有非圆括号和,则将匹配逗号,从而忽略和中的逗号。