You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将指定Clojure字符串解析为按外层括号拆分的字符串集合?

解析嵌套括号的外层元素为字符串数组

你需要解析的目标字符串是:

"add (multiply (add 1 2) (add 3 4)) (add 5 6)"

想要提取的外层3个元素为:add、(multiply (add 1 2) (add 3 4))、(add 5 6)。直接按空格拆分之所以失败,是因为它无法区分外层分隔空格和嵌套括号内部的空格,会把括号里的内容拆得支离破碎。

正确的核心思路是跟踪括号的层级深度,只在层级为0(外层)的空格处做分割,具体实现步骤如下:

  1. 初始化三个变量:

    • depth:记录当前括号层级,初始值为0
    • current_part:用于拼接当前正在处理的片段
    • result:存储最终的结果数组
  2. 遍历字符串的每个字符:

    • 遇到(:层级+1,将字符加入current_part
    • 遇到):层级-1,将字符加入current_part;如果层级回到0,说明当前是一个完整的外层括号片段,将其加入result并清空current_part
    • 遇到空格:如果层级为0,说明这是外层的分隔符,此时若current_part不为空,就把它加入result并清空;如果层级>0,直接把空格加入current_part
    • 其他字符:直接加入current_part
  3. 遍历结束后,若current_part不为空(比如开头的add),将其加入result

代码示例(Python)

def parse_outer_elements(s):
    result = []
    current_part = []
    depth = 0
    for char in s.strip():
        if char == '(':
            depth += 1
            current_part.append(char)
        elif char == ')':
            depth -= 1
            current_part.append(char)
            if depth == 0:
                result.append(''.join(current_part))
                current_part = []
        elif char == ' ':
            if depth == 0:
                if current_part:
                    result.append(''.join(current_part))
                    current_part = []
            else:
                current_part.append(char)
        else:
            current_part.append(char)
    # 处理最后一段未加入的内容
    if current_part:
        result.append(''.join(current_part))
    return result

# 测试执行
input_str = "add (multiply (add 1 2) (add 3 4)) (add 5 6)"
output = parse_outer_elements(input_str)
for item in output:
    print(item)

运行代码后会输出符合预期的结果:

add
(multiply (add 1 2) (add 3 4))
(add 5 6)

这种方法通过层级判断,精准区分了外层和内层的空格,完全不会破坏嵌套括号内的结构。

内容的提问来源于stack exchange,提问作者Kevin Tanudjaja

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 03:10:48