python - 正则表达式查找函数的所有引用并将参数替换/添加到所有实例
问题描述
在函数定义中更改或添加参数后,我想在所有文件中更新该函数的所有引用以具有更新的参数。
我在 VSCode 中使用多文件搜索/替换并使用正则表达式进行。
几个要求
- 此参数可能在其他功能中
- 函数引用可以在多行中
- 不要更新不使用该参数的函数引用
例如,我想将 function_A 的 param_2 重命名为 new_param_2
function_A(
param_1 = .... # this function_A shall not be matched because it doesn't use param_2
)
function_A(
param_1 = ....
param_2 = aaa # only this param_2 shall be renamed to new_param_2
)
function_B(
param_1 = ....
param_2 = aaa # this param_2 shall not be matched because it's not in function_A
)
解决方案
我使用下面的这个正则表达式来匹配和捕获组
(function_A(?:[^)]|\n)+?\W)(param_2)(\W?=)
其中,
(?:[^)]|\n)+?
表现一个惰性匹配在function_A之后和')'之前的多行,它是一个非捕获组。\W)(param_2)(\W?=)
这些 \W 是为了适应掉毛差异
然后,我使用下面的正则表达式来替换和替换
$1new_param_2$3
通过这样做,我可以一次在所有文件中替换函数的所有实例。
[更新] CAVEAT:如果在 param_2 之前有一个 ')',这可能会失败,例如 function_A(param_1=sin(1.0), param_2=2,...)。如果代码库中没有出现这种情况,那么这可能会起作用。[归功于@RootTwo]
推荐阅读
- php - 使用短代码显示产品价格,包括 WooCommerce 中的可变产品
- c# - 如何检查动态 JObject 中的空值?
- asp.net - 在 Visual Studio 2019 Enterprise 中检查 Web 应用程序中未使用的代码
- awk - 相对于下一列转置一列
- azure - Azure API Management 提供的 API 网关和 Azure 应用程序网关有什么区别?
- azure-devops - 在 azure devops analytics api 中获取没有任何任务的用户故事计数
- java - Insert additional into a String
- recursion - 使用可变引用对 app_state 进行 Rust 递归更新
- c# - 如何将移动应用程序连接到 AD B2C
- android - 创建用于二维码的动态网址,将在所有平台(网站、Android 应用程序、IOS 应用程序)中使用