用于解析多括号(和方括号)字符串的正则表达式
Regex to parse multi-brace (and brackets) string
我目前正在 Java 项目中处理导入功能,并且正在接收字符串形式的对象。这里使用了类似于 JSON 的结构。对象括在花括号中,列表放在方括号中。
我现在有一个有点复杂的对象,因为它由对象列表组成,这些对象本身带有更多(其他)对象的列表。我确实知道如何获取内部对象,但我很难分离外部对象。我觉得我忽略了一些相当简单的东西,但是所有的大括号和方括号都没有让它变得更容易。
这是一个导入字符串的示例(为了便于阅读,我将内部对象组合在一起):
[
{
[
{[oid1,oid2],VAL,id1},{[oid2],VAL,id2},
{[oid2,oid3,oid4],VAL,id3}
]
},
{
[
{[oid5,oid6],VAL,id1},
{[oid7,oid8],VAL,id3}
]
}
]
到目前为止,我有这个正则表达式 {\[([^]{]+)],([A-Z_]+),([^}]+)}
匹配所有内部对象和 returns 它们的三个组件作为组。
像这样:
Match 1: {[oid1,oid2],VAL,id1}
Group 1: oid1,oid2
Group 2: VAL
Group 3: id1
这已经很好了,但只是 returns 所有内部对象的列表。现在我需要找到一种方法来获取外部对象列表,并将它们仅包含那些内部对象的列表配对。我应该补充一点,我不一定需要一步完成。我尝试拆分初始字符串,但无法想出一个不会从中“削减”太多的解决方案,这会破坏对结果字符串的解析。非常感谢任何帮助!
在为内部对象添加正则表达式之前,这是您正在寻找的除法吗?
使用的正则表达式:
"]\s+},\s+\{\s+\["
上下文和测试平台中的正则表达式:
public static void main(String[] args) {
String input = "[\n"
+ " {\n"
+ " [\n"
+ " {[oid1,oid2],VAL,id1},{[oid2],VAL,id2},\n"
+ " {[oid2,oid3,oid4],VAL,id3}\n"
+ " ]\n"
+ " },\n"
+ " {\n"
+ " [\n"
+ " {[oid5,oid6],VAL,id1},\n"
+ " {[oid7,oid8],VAL,id3}\n"
+ " ]\n"
+ " }\n"
+ "]";
List<String> resultList = Arrays.asList(input.split("]\s+},\s+\{\s+\["));
resultList.forEach(s -> System.out.printf("%s%n === %n", s));
}
输出:
[
{
[
{[oid1,oid2],VAL,id1},{[oid2],VAL,id2},
{[oid2,oid3,oid4],VAL,id3}
===
{[oid5,oid6],VAL,id1},
{[oid7,oid8],VAL,id3}
]
}
]
我目前正在 Java 项目中处理导入功能,并且正在接收字符串形式的对象。这里使用了类似于 JSON 的结构。对象括在花括号中,列表放在方括号中。
我现在有一个有点复杂的对象,因为它由对象列表组成,这些对象本身带有更多(其他)对象的列表。我确实知道如何获取内部对象,但我很难分离外部对象。我觉得我忽略了一些相当简单的东西,但是所有的大括号和方括号都没有让它变得更容易。
这是一个导入字符串的示例(为了便于阅读,我将内部对象组合在一起):
[
{
[
{[oid1,oid2],VAL,id1},{[oid2],VAL,id2},
{[oid2,oid3,oid4],VAL,id3}
]
},
{
[
{[oid5,oid6],VAL,id1},
{[oid7,oid8],VAL,id3}
]
}
]
到目前为止,我有这个正则表达式 {\[([^]{]+)],([A-Z_]+),([^}]+)}
匹配所有内部对象和 returns 它们的三个组件作为组。
像这样:
Match 1: {[oid1,oid2],VAL,id1}
Group 1: oid1,oid2
Group 2: VAL
Group 3: id1
这已经很好了,但只是 returns 所有内部对象的列表。现在我需要找到一种方法来获取外部对象列表,并将它们仅包含那些内部对象的列表配对。我应该补充一点,我不一定需要一步完成。我尝试拆分初始字符串,但无法想出一个不会从中“削减”太多的解决方案,这会破坏对结果字符串的解析。非常感谢任何帮助!
在为内部对象添加正则表达式之前,这是您正在寻找的除法吗?
使用的正则表达式:
"]\s+},\s+\{\s+\["
上下文和测试平台中的正则表达式:
public static void main(String[] args) {
String input = "[\n"
+ " {\n"
+ " [\n"
+ " {[oid1,oid2],VAL,id1},{[oid2],VAL,id2},\n"
+ " {[oid2,oid3,oid4],VAL,id3}\n"
+ " ]\n"
+ " },\n"
+ " {\n"
+ " [\n"
+ " {[oid5,oid6],VAL,id1},\n"
+ " {[oid7,oid8],VAL,id3}\n"
+ " ]\n"
+ " }\n"
+ "]";
List<String> resultList = Arrays.asList(input.split("]\s+},\s+\{\s+\["));
resultList.forEach(s -> System.out.printf("%s%n === %n", s));
}
输出:
[
{
[
{[oid1,oid2],VAL,id1},{[oid2],VAL,id2},
{[oid2,oid3,oid4],VAL,id3}
===
{[oid5,oid6],VAL,id1},
{[oid7,oid8],VAL,id3}
]
}
]