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

如何用正则提取方括号内函数并存储为字典?解决括号缺失问题

提取方括号内函数并存储到字典的解决方案

问题背景

你尝试从字符串里提取方括号内的所有函数并存储到字典,但当前代码输出除最后一个函数外,其余函数的右括号)都被剥离了。你的代码和错误输出如下:

原代码

import re
line="[f(x,y),g(y,z),f1(x1,y1)]"
matches = re.match(r"(.*)(\[)(.*)(\])(.*)", line)
if matches:
    all_action_labels = matches.group(3)
    sep_action_labels = re.split(r'\),',all_action_labels)
    j=0
    for x in sep_action_labels:
        print(f'Function #{j+1} : {x}')

错误输出

Function #1 : f(x,y
Function #2 : g(y,z
Function #3 : f1(x1,y1)

问题原因

你用re.split(r'\),', all_action_labels)拆分函数时,split会把匹配到的分隔符(也就是),)完全移除,所以前面的函数都丢失了右括号),只有最后一个函数因为末尾没有),,才保留了完整括号。

更简洁准确的解决方案

其实不用这么繁琐的拆分步骤,直接用re.findall匹配所有符合格式的函数就好,同时能轻松把结果存入字典。

修正后的代码

import re

line = "[f(x,y),g(y,z),f1(x1,y1)]"
# 匹配标准函数格式:函数名(字母/数字开头)+ 括号包裹的参数
functions = re.findall(r'\w+\(.*?\)', line)

# 将函数存入字典,两种存储方式可选
func_dict = {}
# 方式1:用序号作为键(不会有重名覆盖问题)
for idx, func in enumerate(functions, start=1):
    func_dict[f"function_{idx}"] = func

# 方式2:用函数名作为键(如果有重名函数,后面的会覆盖前面的,按需选择)
# for func in functions:
#     func_name = re.match(r'(\w+)\(', func).group(1)
#     func_dict[func_name] = func

# 打印验证结果
for key, value in func_dict.items():
    print(f"{key}: {value}")

代码说明

  1. 正则匹配逻辑:\w+\(.*?\)的含义:

    • \w+:匹配1个以上的字母、数字或下划线,对应合法的函数名
    • \(:转义匹配左括号((括号在正则里是特殊字符,必须转义)
    • .*?:非贪婪匹配任意字符,直到遇到第一个),确保只匹配单个函数的参数部分,不会跨函数匹配
    • \):转义匹配右括号)
  2. 字典存储:

    • 用enumerate从1开始计数,把每个函数按序号存入字典,键如function_1、function_2,避免重名覆盖
    • 如果想用函数名当键,注释里的代码可以实现,但要注意重名函数会被覆盖的问题

运行结果

function_1: f(x,y)
function_2: g(y,z)
function_3: f1(x1,y1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 07:23:27