如何拆分含嵌套括号的字符串?现有正则匹配结果不符合预期
拆分含嵌套括号的顶层括号单元
你用的\((.*?)\)无法处理嵌套括号,因为它会匹配到第一个右括号就终止,不会考虑内部的嵌套结构。下面提供两种可行的解决方案:
方案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
相关产品推荐
相关产品推荐

