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

如何拆分含嵌套括号的字符串?现有正则匹配结果不符合预期

拆分含嵌套括号的顶层括号单元

你用的\((.*?)\)无法处理嵌套括号,因为它会匹配到第一个右括号就终止,不会考虑内部的嵌套结构。下面提供两种可行的解决方案:

方案1:使用支持递归的正则表达式

部分正则引擎(比如Python的regex库)支持递归匹配,可以用来处理嵌套括号。正则模式\((?:[^()]|(?R))*\)会匹配完整的顶层括号单元,包括内部嵌套的括号。

代码示例(Python)

首先安装依赖库:

pip install regex

然后执行拆分:

import regex

input_str = "(Key value) (Key_Name val1 val2) (Key value) (Key_1 Value) (TESTS Key1 Key2 (Key3 Value)) (Key Value 0.0) (Key_1 (Key value) (Key value))"
# 匹配所有顶层括号单元
units = regex.findall(r'\((?:[^()]|(?R))*\)', input_str)

# 每个单元单独输出一行
for unit in units:
    print(unit)

方案2:手动计数括号(通用兼容)

如果你的环境不支持递归正则,或者需要更通用的实现,可以通过遍历字符串、计数括号深度的方式拆分:

代码示例(Python)

input_str = "(Key value) (Key_Name val1 val2) (Key value) (Key_1 Value) (TESTS Key1 Key2 (Key3 Value)) (Key Value 0.0) (Key_1 (Key value) (Key value))"
result = []
current_unit = []
bracket_count = 0

for char in input_str:
    if char == '(':
        bracket_count += 1
        current_unit.append(char)
    elif char == ')':
        bracket_count -= 1
        current_unit.append(char)
        # 括号深度回到0,说明当前顶层单元完成
        if bracket_count == 0:
            result.append(''.join(current_unit).strip())
            current_unit = []
    # 只有处于括号内部时,才保留非括号字符
    elif bracket_count > 0:
        current_unit.append(char)

# 输出结果
for unit in result:
    print(unit)

两种方法都能得到你期望的拆分结果,每个顶层括号单元单独一行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:37:29