【发布时间】:2023-03-09 09:51:01
【问题描述】:
我正在努力将带括号的字符串(例如 f(d(a c(b))e))转换为 Java 中的 Tree 数据结构(我正在研究一种允许使用字符串表示来实例化 Tree 的方法)。在上面的字符串中,f 是树的根节点,它在d 处分支为子树,在e 处分支为叶节点。在我能够将f 识别为当前节点的标签后,我就剩下d(a c(b))e。
我希望能够使用 Java 的正则表达式来识别孩子;在这种情况下,d(a c(b)) 和 e。因此,要求如下。
在字符串中,单个字符后面可能有也可能没有括号。如果后面是括号,则返回里面的所有子字符串,即使它包含嵌套括号。因此,正则表达式将匹配d(a c(b)) 或e。
此外,我希望它不仅仅适用于有两个孩子的节点。一个可能的带括号的字符串可能是f(a b c),它是一棵以f 为根的树,有3 个叶子。
到目前为止,我有.\(?[^\(\)]\)?,但这不起作用。
【问题讨论】:
-
刚开始创建解析器,忘记正则表达式。它可能变得如此复杂,以至于您甚至都不会遵循它。
-
用正则表达式是不可能的,见stackoverflow.com/questions/133601/…使用StreamTokenizer和递归docs.oracle.com/javase/7/docs/api/java/io/StreamTokenizer.html