2017-05-05 32 views
0

今天我收到了一些非常糟糕的vb.Net代碼,並要求將它遷移到使用ODP.Net。爲了簡化這一點,我使用Find/Replace將所有命令變量設置爲BindByName = true。基於前幾個代碼文件,雖然所有這些都被命名爲「cmd」。不幸的是,他們不是;代碼的原始作者實際上是在他們的目的之後命名了他們的所有命令,儘管他們每個函數只使用了一個OracleCommand。他們也認爲using顯然不值得做。查找/替換中使用什麼正則表達式來查找聲明字符串的所有實例?

Dim cmGetStatus As New OracleCommand 
cmGetStatus.CommandType = CommandType.StoredProcedure 
cmd.BindByName = True `<--this was added by my previous replace with a regex 

我可以使用正則表達式是什麼搶的「點心____作爲新的OracleCommand」的所有實例和替換「CMD」變量名?那麼在「_____。CommandType」的所有實例上進行相同類型的替換呢?這將爲我節省至少8小時的手動編輯。

+0

您可以在Notepad ++中使用一個正則表達式來完成。不在VS. –

回答

2

搜索:(DIM)*(作爲新的OracleCommand)

替換:$ 1cmd $ 2

搜索:*(= CommandType.StoredProcedure)

更換:在cmd $ 1

組替換用$ 1,$ 2等完成。

+0

難道這理論上不能在一個正則表達式中完成嗎?我不是很熟悉VS正則表達式替換,但可以像'/(Dim\s+)?cm\w+(.*New\s+OracleCommand|\.CommandType\s+=\s+CommandType\.StoredProcedure) /'工作?替換仍然是'$ 1cmd $ 2'。 –

+0

絕對!另外,我在那裏投入了空間,假設空間到處都是一樣的。情況可能並非如此。我儘可能簡單地保持它,但正則表達式是完全靈活的。 – allen1

+0

@JosephMarikle每個人都希望將他們的複雜任務整合到一個正則表達式中。爲什麼?它通常更清晰,更不容易出錯,可以採用更簡單的多步驟流程。 – 2017-05-05 15:36:26