我正在尝试编写一个正则表达式来查找和替换 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(未添加到匹配项中,因为它是正向预测)。
结果:
