簡體   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