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

如何编写Regex Pattern提取Python函数声明括号内的参数内容

Python函数参数提取方案

正则匹配方案

适合参数结构简单、无嵌套括号/参数内逗号的场景,直接使用以下正则捕获即可:
核心正则:r'def\s+\w+\((.*?)\)\s*:'
捕获组1即为括号内的完整参数字符串,示例代码如下:

import re

def get_param_str(def_line: str):
    res = re.match(r'def\s+\w+\((.*?)\)\s*:', def_line.strip())
    return res.group(1) if res else None

# 测试示例
test_line = "def func(int_var:int,float_var=12.1,string_var=foo()):"
param_str = get_param_str(test_line)
print(param_str)
# 输出:int_var:int,float_var=12.1,string_var=foo()
# 简单场景下直接按逗号拆分即可得到参数列表

注意:如果参数默认值包含嵌套括号、参数内带逗号(比如默认值为元组/函数调用带参数),正则会匹配出错,推荐使用下方的ast解析方案。

通用ast解析方案

利用Python自带的语法解析模块处理,完全贴合Python语法规则,不管参数结构多复杂都能正确识别,无需手动处理边界情况:

import ast

def extract_param_list(def_line: str) -> list:
    # 补全pass让单行函数定义可以被正常解析成语法树
    ast_tree = ast.parse(def_line + "pass")
    func_node = ast_tree.body[0]
    param_list = []
    arg_count = len(func_node.args.args)
    default_count = len(func_node.args.defaults)
    for idx, arg in enumerate(func_node.args.args):
        # 拼接参数名+类型标注(如果有)
        current_param = arg.arg
        if arg.annotation:
            current_param += f":{ast.unparse(arg.annotation)}"
        # 拼接默认值(如果有)
        if idx >= arg_count - default_count:
            default_val = func_node.args.defaults[idx - (arg_count - default_count)]
            current_param += f"={ast.unparse(default_val)}"
        param_list.append(current_param)
    return param_list

# 测试示例
test_line = "def func(int_var:int,float_var=12.1,string_var=foo()):"
print(extract_param_list(test_line))
# 输出:['int_var:int', 'float_var=12.1', 'string_var=foo()']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 22:45:01