Python中如何将字符串内的函数调用替换为对应属性
解决方案
核心思路
用正则表达式精准匹配函数调用格式,将函数名(任意参数)的结构统一替换为函数名.latex,不管括号内参数的数量、长度如何,都能一次性完成替换。
具体实现(Python)
import re # 原始表达式字符串 EL0 = '100000*Assurance_WL(55) - 2000*Annuity_WL(55, 0.065) + (1500 + 3000)/0.95' # 正则替换:匹配目标函数调用,替换为对应.latex属性 latex_expr = re.sub(r'(Assurance_WL|Annuity_WL)\(.*?\)', r'\1.latex', EL0) print(latex_expr) # 输出:100000*Assurance_WL.latex - 2000*Annuity_WL.latex + (1500 + 3000)/0.95
代码解释
- 正则模式
r'(Assurance_WL|Annuity_WL)\(.*?\)':(Assurance_WL|Annuity_WL):捕获组,精准匹配两个目标函数名中的任意一个\(:转义匹配左括号(括号在正则中属于特殊字符).*?:非贪婪匹配,覆盖括号内所有参数内容(直到遇到第一个右括号\)为止)
- 替换模板
r'\1.latex':\1引用捕获到的函数名,拼接.latex完成替换
复杂场景拓展
如果函数调用存在嵌套括号(比如Assurance_WL(55, calculate_rate(0.04))),基础正则会失效,这时可以用支持平衡组的第三方库regex实现递归匹配:
import regex latex_expr = regex.sub(r'(Assurance_WL|Annuity_WL)\((?:[^()]|(?R))*\)', r'\1.latex', EL0)
该模式可以递归识别嵌套括号结构,覆盖更复杂的表达式场景。
内容的提问来源于stack exchange,提问作者TroubleMaker
相关产品推荐
相关产品推荐

