Python实现按逗号分割函数参数 忽略任意层级嵌套括号内逗号
支持任意层级括号嵌套的逗号分割参数实现问题
我正在开发支持字符串内函数调用的解析器,目前已实现的逻辑通过正则匹配{function_name(whatever input)}格式语法,支持多层嵌套解析,会递归向下处理直到括号内的参数内容(即解析输入)不再包含嵌套函数为止。
例如对于字符串{function(arg, arg2, arg3)},我已可成功提取括号内的参数内容arg, arg2, arg3,此前直接使用.split(',')即可完成参数拆分;当嵌套函数无多参数时(如arg, nested(arg2), arg3),该方法也可正常运行。
但当嵌套函数自身包含逗号分隔的多参数时(如arg, nested(arg2, another), arg3),简单逗号分割会直接失效。我曾尝试用正则识别引号内的逗号,但非贪婪匹配无法覆盖所有场景,贪婪匹配又会干扰其他嵌套函数的识别。
arg, nested(arg2, another), arg3, call(this) ^-> <-^
已尝试的方案
- 搜索到的各类正则方案要么无法在Python中运行,要么依赖Python内置
re库不支持的特性。注:递归匹配特性在第三方regex库中提供支持,使用该第三方库的方案也可接受。 - 尝试过先将括号内的逗号替换为占位符再分割的思路,但面对未知层级的嵌套括号时该方案同样存在问题;还尝试使用
\(([^()]|(?R))*\)正则整体匹配移除嵌套函数调用,但运行结果不符合预期,不确定是否为正则引擎差异导致——在正则测试站点验证时该正则可正确匹配含嵌套层级的括号内容。
核心需求
按逗号分割字符串,括号内的逗号不参与分割,括号支持任意未知层级的嵌套,非正则实现方案也可接受。
预期输出示例
# 输入字符串 "arg, nested(arg2, another), arg3, call(this)" # 期望分割结果 ['arg', 'nested(arg2, another)', 'arg3', 'call(this)']
环境要求
当前在Windows环境使用Python 3.9.1开发测试,方案需同时兼容Ubuntu服务器运行环境。
内容的提问来源于stack exchange,提问作者Ali
相关产品推荐
相关产品推荐

