繁体   English   中英

Visual Studio 2015社区-Regex查找和替换

[英]Visual Studio 2015 community - Regex Find and Replace

我正在尝试编写一个正则表达式来查找和替换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.)

直到我添加?=逻辑和regex表达式为止。

编辑:

本质上,我希望有一个正则表达式可以查找并替换与(.*Instantiate)匹配但在类作用域的Member Of Operator之前不包含DontReplace的所有内容。 它还应将替换字符串附加到.Instantiate所有实例上, .Instantiate使它们成为ReplacedClass.Instantiate

您可以使用

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

正则表达式演示

细节

  • (?:\\w+\\.)? -的可选(如(...) ,例如不应匹配)序列
    • \\w+ -1个或多个字字符
    • \\. -一个. 烧焦
  • (?<!\\bDontReplaceThis\\.[\\w.]*) -如果没有DontReplaceThis.则负向后DontReplaceThis.匹配失败DontReplaceThis. 整个单词( \\b是单词边界),后跟0+单词或. 立即在当前位置的左侧字符(有效地,它会失败匹配var x = DontReplaceThis.Some.Class.Instantiate(...) ,如果您需要匹配它,则需要删除[\\w.]*
  • (\\bInstantiate) -与Instantiate匹配的组1( $1
  • (?=\\() -后跟一个(字符(由于正先行而未添加到匹配中)。

结果:

在此处输入图片说明

由于您正在寻找Instantiate作为方法调用,并且只希望在DontReplaceThis.之前没有它的情况下将其替换DontReplaceThis. 您可以在后面使用否定式:

搜索模式:

((\w+\.)|\s)?(?<!DontReplaceThis\.)(Instantiate\()

更换方式:

ReplacedClass.$3

说明:

?<! 仅在没有以下字符串的情况下匹配。 (在这种情况下: DontReplaceThis

((\\w+\\.)|\\s)? 如果前面有任一个,则匹配optionaly

\\w+\\. 任何出现1次或多次并后跟一个点的单词字符

| 要么

\\s任何空格字符

\\(匹配括号。方法调用的指示

(Instantiate\\()括号定义了一个可以用$3替换模式访问的组(插入第三个匹配的组)

有关更多信息,请查看正则表达式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM