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

如何用正则表达式拆分含嵌套函数的拼接函数调用字符串?

拆分含嵌套函数调用的拼接字符串

你的问题出在原正则用了非贪婪匹配.*?,它会在遇到第一个右括号)时就停止匹配,没法处理函数参数里嵌套的子函数(比如c(1,2,3)这种)。

要完整匹配包含嵌套函数的调用,需要用支持平衡括号匹配的正则表达式。Python 3.10及以上版本的标准re库支持递归语法,可以直接实现:

解决方案代码

import re

# 包含嵌套函数的目标字符串
s = "hello(data=x, capitalize = True)there()my(x = x)dear(x, 6L, ...)friend(x = c(1, 2, 3))another(y = list(a=1, b=c(2,3)))"

# 匹配含嵌套的函数调用正则
pattern = r'\w+\((?:[^()]|(?R))*\)'
result = re.findall(pattern, s)

print(result)

输出结果

['hello(data=x, capitalize = True)', 'there()', 'my(x = x)', 'dear(x, 6L, ...)', 'friend(x = c(1, 2, 3))', 'another(y = list(a=1, b=c(2,3)))']

正则说明

  • \w+:匹配函数名(由字母、数字、下划线组成)
  • \(:匹配函数的左括号
  • (?:[^()]|(?R))*:非捕获组,负责匹配括号内的内容:
    • [^()]:匹配不是括号的普通字符
    • (?R):递归匹配整个正则模式,也就是处理嵌套的函数调用(比如子函数里的c(1,2,3))
  • \):匹配函数的右括号

兼容旧Python版本(3.10以下)

如果你的Python版本低于3.10,标准re库不支持(?R)递归语法,可以使用第三方库regex(功能更强大的正则库):

  1. 先安装库:
pip install regex
  1. 使用代码:
import regex

s = "hello(data=x, capitalize = True)there()my(x = x)dear(x, 6L, ...)friend(x = c(1, 2, 3))"
result = regex.findall(r'\w+\((?:[^()]|(?R))*\)', s)
print(result)

内容的提问来源于stack exchange,提问作者O Renée

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 19:06:18