【问题标题】:Regex to parse multi-brace (and brackets) string正则表达式解析多括号(和括号)字符串
【发布时间】:2021-09-17 08:51:26
【问题描述】:

我目前正在研究 Java 项目中的导入功能,并且正在以字符串的形式接收对象。这里使用了类似于 JSON 的结构。对象用大括号括起来,列表用方括号括起来。

我现在有一个更复杂的对象,因为它由对象列表组成,这些对象本身携带更多(其他)对象的列表。我确实知道如何获取内部对象,但我在分离外部对象时遇到了困难。我觉得我忽略了一些相当简单的东西,但是所有的大括号和方括号并没有让它变得更容易。

这是导入字符串的外观示例(为了便于阅读,我将内部对象组合在一起):

[
 {
  [
   {[oid1,oid2],VAL,id1},{[oid2],VAL,id2},
   {[oid2,oid3,oid4],VAL,id3}
  ]
 },
 {
  [
   {[oid5,oid6],VAL,id1},
   {[oid7,oid8],VAL,id3}
  ]
 }
]

到目前为止,我有这个正则表达式 {\[([^]{]+)],([A-Z_]+),([^}]+)} 匹配所有内部对象并将它们的三个组件作为组返回。

像这样:

Match 1: {[oid1,oid2],VAL,id1}
Group 1: oid1,oid2
Group 2: VAL
Group 3: id1

这已经很好了,但只是返回所有内部对象的列表。现在我需要找到一种方法来获取外部对象列表以及它们所包含的内部对象列表。我应该补充一点,我不一定需要一步完成。我尝试拆分初始字符串,但无法想出一个不会“削减”太多的解决方案,这会破坏解析结果字符串。非常感谢任何帮助!

【问题讨论】:

  • 外部对象到底是什么? [ {{[oid1,oid2],VAL,id1},{[oid2],VAL,id2}, {[oid2,oid3,oid4],VAL,id3} ] 是这样的吗?
  • @Scratte 是和否 :) 这是一个 complete 对象,包括其内部对象。从某种意义上说,外部确实是一个空壳。

标签: java regex square-bracket braces


【解决方案1】:

在为内部对象添加正则表达式之前,这是您正在寻找的划分吗?

使用的正则表达式:

"]\\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}
  ]
 }
]

【讨论】:

  • 我确实是这样解决的。也适用于两个以上的条目。就像您建议的那样,我首先拆分输入,然后将我的正则表达式应用于内部对象。
猜你喜欢
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
  • 2015-12-30
  • 1970-01-01
  • 2012-04-05
  • 2011-09-05
  • 1970-01-01
相关资源
最近更新 更多