正则表达式查找替换以添加功能参数

时间:2019-02-07 10:58:17

标签: regex

我正在尝试查找和替换py程序中的某些函数调用。想法是向项目中找到的每个调用添加一些布尔参数。 我在互联网上寻找解决方案,因为我根本不了解正则表达式科学……对于正则表达式的人来说,这似乎是一种基本练习,但仍然如此。

就我而言,我在很多文件中都有这个电话:

myFunction("test")

我的目标是找到此呼叫并将其替换为:

myFunction("test", false)

您能帮我写正则表达式吗?

3 个答案:

答案 0 :(得分:0)

请参阅:

import re

#Replace all white-space characters with the digit "9":

str = "The rain in Spain"
x = re.sub("\s", "9", str)
print(x)

答案 1 :(得分:0)

尝试以下命令:

sed -re 's/(myFunction)[[:space:]]*\([[:space:]]*("test")[[:space:]]*\)/\1(\2, false)/' SOURCE_FILENAME

如果您希望用更新的源文件替换现有的源文件,请写-i SOURCE_FILENAME而不是SOURCE_FILENAME

这通过定义 pattern 来匹配您要更新的函数调用而起作用:

  • myFunction(显然)与文本myFunction相匹配;
  • [[:space:]]匹配任何空白字符,主要是空格和制表符。
  • [[:space:]]*匹配零个或多个空格字符。
  • \(\)与程序文本中的文字括号匹配;
  • ()是不匹配的正则表达式元字符,但("test")匹配"test" captures 匹配的文本以供以后使用。

请注意,此模式使用()捕获了两件事。 ("test")是其中的第二个。

现在让我们检查Sed命令's/.../.../'的整体结构。 s的意思是“替代”,因此's/.../.../'是Sed的 substitution 命令。

在第一和第二个斜杠之间出现了我们刚刚讨论的模式。在第二个和第三个斜杠之间是替换文本,Sed使用该替换文本替换与该模式匹配的程序文本的任何行的匹配部分。在替换文本中,\1\2后向引用,用于放置先前使用()捕获的文本。

就这样。我不仅帮助您编写了正则表达式,而且还向您展示了正则表达式的工作原理,以便下次您可以编写自己的正则表达式。

答案 2 :(得分:0)

你可以使用这个正则表达式来匹配和捕获

(myFunction\("test")(\))

然后使用下面的正则表达式替换

$1, false$2

enter image description here