C# Visual Studio 2015社区-正则表达式查找和替换
我正在尝试编写一个正则表达式来查找和替换VisualStudio中的代码 以下是现有代码的示例:C# Visual Studio 2015社区-正则表达式查找和替换,c#,regex,visual-studio-2015,replace,find,C#,Regex,Visual Studio 2015,Replace,Find,我正在尝试编写一个正则表达式来查找和替换VisualStudio中的代码 以下是现有代码的示例: GameObject go = Instantiate(...); GameObject go2 = (GameObject)Instantiate(...); GameObject go3 = ReplaceThis.Instantiate(...); GameObject go4 = DontReplaceThis.Instantiate(...); 我基本上需要一个正则表达式来将代码段更改为
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.)
这一直持续到我为正则表达式添加了?=
逻辑and
编辑:
本质上,我希望有一个正则表达式来查找和替换与类作用域的运算符的成员之前匹配的(.*Instantiate)
,但不包含DontReplace
。它还应该将替换字符串附加到的所有实例中。实例化使其成为ReplacedClass。实例化,因为您正在寻找实例化作为方法调用,并且仅当它前面有DontReplaceThis时才想替换它。
您可以使用负数回顾:
搜索模式:
((\w+\.)|\s)?(?<!DontReplaceThis\.)(Instantiate\()
说明:
?仅当前面没有以下字符串时匹配。(在这种情况下:不要替换此
)
((\w+\)\124;\ s)?
如果前面有两个选项之一,则可选匹配
\w+\。
任何出现1次或多次并后跟一个点的单词字符
|
或
\s
任何空白字符
\(
匹配左括号。表示方法调用
(实例化\()
括号定义了一个组,可以通过$3
在替换模式中访问该组(插入第三个匹配的组)
有关详细信息,请查看,因为您正在寻找将实例化为方法调用,并且只有在不是的情况下才想替换它,前提是前面有DontReplaceThis。
您可以使用反向查找:
搜索模式:
((\w+\.)|\s)?(?<!DontReplaceThis\.)(Instantiate\()
说明:
?仅当前面没有以下字符串时才匹配。(在本例中:DontReplaceThis
)
((\w+\)\124;\ s)?
如果前面有两个选项之一,则可选匹配
\w+\。
任何出现1次或多次并后跟一个点的单词字符
|
或
\s
任何空白字符
\(
匹配左括号。表示方法调用
(实例化\()
括号定义了一个组,可以通过$3
在替换模式中访问该组(插入第三个匹配的组)
有关更多信息,请查看您可以使用的
(?:\w+\.)?(?<!\bDontReplaceThis\.[\w.]*)(\bInstantiate)(?=\()
(?:\w+\)(?
见
详细信息
(?:\w+\)?
-一个可选的(如(…)
,例如,不应匹配)序列
\w+
-1个或多个单词字符
\.
-a
字符
(?-如果存在DontReplaceThis,则会导致匹配失败的负面查找。
作为一个完整的单词(\b
是单词边界),紧跟在当前位置左侧的0+单词或
字符(实际上,它会导致匹配失败,如var x=DontReplaceThis.Some.Class.Instantiate(…)
,如果需要匹配,则需要删除[\w.]*
)
(\bin实例化)
-组1($1
)匹配实例化
(?=\()
-后跟一个(
字符(未添加到匹配中,因为它是正向前瞻)
结果:
您可以使用
(?:\w+\.)?(?<!\bDontReplaceThis\.[\w.]*)(\bInstantiate)(?=\()
(?:\w+\)(?
见
详细信息
(?:\w+\)?
-一个可选的(如(…)
,例如,不应匹配)序列
\w+
-1个或多个单词字符
\.
-a
字符
(?-如果存在DontReplaceThis,则会导致匹配失败的负面查找。
作为一个完整的单词(\b
是单词边界),紧跟在当前位置左侧的0+单词或
字符(实际上,它会导致匹配失败,如var x=DontReplaceThis.Some.Class.Instantiate(…)
,如果需要匹配,则需要删除[\w.]*
)
(\bin实例化)
-组1($1
)匹配实例化
(?=\()
-后跟一个(
字符(未添加到匹配中,因为它是正向前瞻)
结果:
这很难理解,你能不能也用引号加上一些输入文本的例子,然后说出你想要的答案output@MichaelRandall我在问题中添加了匹配条件的解释。至于输入,您可以使用第一个代码段,其输出将是第二个代码段。我不确定如何简化示例输入我知道了,你在一个源文件中运行这个,请考虑一下。这很难理解,你也可以在引文中输入一些输入文本的例子吗?output@MichaelRandall我在问题中添加了对匹配条件的解释。至于输入,您可以使用第一个代码sniPPET和它的输出将是第二个代码片段。我不知道如何简化示例输入和输出。AHI我明白了,在一个StuttTysChrestHelLeon的源文件上运行这一点,请考虑。*
意味着在调用之前匹配可能的嵌套对象,如DontReplaceThis.subperty.subsubsubproperty.Instantiate
?@MongZhu是的,我在回答中解释过。只需将var x=DontReplaceThis.Some.Class.Instantiate(…)
粘贴到regexstorm.net的demo fiddle中,如果您会看到它不匹配。删除[\w.]*
将与之匹配。完美,这是最好的answe