首页 > 解决方案 > 正则表达式查找函数的所有引用并将参数替换/添加到所有实例

问题描述

在函数定义中更改或添加参数后,我想在所有文件中更新该函数的所有引用以具有更新的参数。

我在 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
)

标签: pythonregexvisual-studio-coderegex-groupregexp-replace

解决方案


我使用下面的这个正则表达式来匹配和捕获组

(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]

在此处输入图像描述


推荐阅读