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

如何用Python 2.7内置函数提取字符串格式Python函数的入参

解决方案

正则失效原因

你最初的正则返回None主要有两个问题:

  • re.match() 要求从字符串开头完成匹配,而你的输入字符串开头是函数名,并非参数部分,自然匹配失败
  • 正则本身的语法和匹配逻辑存在缺陷,既没有处理函数名前缀,也没有覆盖非字符串类型的参数(比如示例中的布尔值False)

实现方案

方案1:正则实现(推荐,兼容性好)

Python 2.7内置的re模块完全可以满足需求,代码如下:

import re

def extract_call_args(func_str):
    # 第一步截取括号内部的参数字符串
    args_part = func_str[func_str.find('(') + 1 : func_str.rfind(')')]
    # 匹配两种参数:带双引号的字符串、不带引号的常量(布尔、数字等)
    pattern = re.compile(r'"([^"]+)"|(\w+)')
    match_res = pattern.findall(args_part)
    # 处理匹配结果,每组仅一个分组有有效值
    return [item[0] if item[0] else item[1] for item in match_res]

测试验证

# 测试用例
test_cases = [
    'create.copy("Node_A", "Information", False)',
    'create.new("Node_B")',
    'delete("Node_C")'
]

for case in test_cases:
    print extract_call_args(case)

输出结果完全符合预期:

["Node_A", "Information", "False"]
["Node_B"]
["Node_C"]

方案2:纯字符串处理(无需依赖正则)

如果不想使用正则,仅用基础字符串操作也可以实现,适配你给出的所有场景:

def extract_call_args_no_re(func_str):
    # 提取括号内的参数部分
    args_content = func_str[func_str.index('(') + 1 : func_str.rindex(')')]
    args_list = args_content.split(',')
    res = []
    for arg in args_list:
        arg = arg.strip()
        # 去除参数两端的双引号
        if arg.startswith('"') and arg.endswith('"'):
            arg = arg[1:-1]
        res.append(arg)
    return res

该方案适用于参数中不包含嵌套引号、逗号的场景,你给出的示例均满足该条件。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 02:18:03