Skip to main content
 首页 » 编程设计

c#之Visual Studio 2015 社区之正则表达式查找和替换

2024年01月26日32lhb25

我正在尝试编写一个正则表达式来查找和替换 visual studio 中的代码。

以下是现有代码的示例:

GameObject go = Instantiate(...); 
GameObject go2 = (GameObject)Instantiate(...); 
GameObject go3 = ReplaceThis.Instantiate(...); 
GameObject go4 = DontReplaceThis.Instantiate(...); 

我基本上需要一个正则表达式来将代码段更改为以下内容:

GameObject go = ReplacedClass.Instantiate(...); 
GameObject go2 = (GameObject)ReplacedClass.Instantiate(...); 
GameObject go3 = ReplacedClass.Instantiate(...); 
GameObject go4 = DontReplaceThis.Instantiate(...); 

如您所见,DontReplaceThis.Instantiate(...); 是唯一没有被替换的。

到目前为止我有:

Find: (?=.*Instantiate)(?=?!DontReplaceThis.) 

这一直有效,直到我为正则表达式添加了 ?= 逻辑和。

编辑:

本质上,我希望有一个正则表达式查找和替换匹配 (.*Instantiate) 但不包含 DontReplace 的任何内容范围。它还应将替换字符串附加到 .Instantiate 的所有实例,以便它们成为 ReplacedClass.Instantiate

请您参考如下方法:

你可以使用

(?:\w+\.)?(?<!\bDontReplaceThis\.[\w.]*)(\bInstantiate)(?=\() 

参见 regex demo

详情

  • (?:\w+\.)? - 一个可选的(如 (...) ,例如,不应匹配)序列
    • \w+ - 1 个或多个单词字符
    • \. - 一个 .字符
  • (?<!\bDontReplaceThis\.[\w.]*) - 如果有 DontReplaceThis. 则匹配失败的负面回顾作为一个完整的单词(\b 是单词边界)后跟 0+ 单词或 .当前位置左侧的字符(实际上,它无法匹配 var x = DontReplaceThis.Some.Class.Instantiate(...) ,如果您需要匹配它,则需要删除 [\w.]* )
  • (\bInstantiate) - 第 1 组 ( $1 ) 匹配 Instantiate
  • (?=\() - 接着是 ( char(未添加到匹配项中,因为它是正向预测)。

结果: