2013-02-23 57 views
0

嗨我正在嘗試創建一個應用程序來幫助我切換出我的Catch-Block的測試內容,並用生產內容替換它們。我能夠讀取我的文件並解析內容,但是在創建正則表達式(我還是全新的)時遇到問題以識別try-catch塊,因此我可以選擇刪除或更改其中的內容catch塊。任何人都可以幫助我解決這個問題?Regex識別包含在.cs文件中的Try-Catch和Try-Catch finally塊

到目前爲止,我下面的表達式事先(不工作在所有)

try{*}catch(*){*) 

感謝。

+0

你還可以發佈一些用於刪除/替換內容的C#代碼嗎? – WLin 2013-02-23 03:48:40

+0

我還沒有把那部分放在一起。我被困在識別try-catch或try-catch最後在文本文件中。我將嘗試捕獲到隊列中。然後我通過隊列循環以確保內容真正有效。由於我沒有得到正確的正則表達式,所以我被困在那裏。 – Kobojunkie 2013-02-23 03:51:16

回答

3

你不能寫這樣做的正則表達式,因爲正則表達式can't be used to match nested patterns。這意味着它將無法識別您的代碼中的右大括號與其他嵌套大括號是什麼時候發生的。你需要一個像ANTLR這樣的解析器生成器,就像鏈接的答案所建議的那樣。

+0

我記得自動機類,我學會了如何解析文件中的開放和關閉花括號。我認爲這是可以做到的,那麼應該可以使用正則表達式來做類似的事情。或者我錯了? – Kobojunkie 2013-02-23 03:57:22

+0

正則表達式不能計算它們看到的開放大括號和大括號的數量,因此它們不適合執行此任務。 – lmortenson 2013-02-23 03:58:05

1

我建議看看正在開發的微軟的Roslyn compiler。它的API應該可以讓你完成你想要做的任何事情。目前正在預覽中。

0

我認爲這會開車送你到一個解決方案:

try\s*\{[^{}]*([^{}]*\{[^{}]*\}[^{}]*)*[^{}]*\}\s*catch\s*\([^()]*(\([^()]*\))*\)\s*\{[^{}]*([^{}]*\{[^{}]*\}[^{}]*)*[^{}]*\} 

try\s*比賽嘗試後跟零個或多個空格。

\{[^{}]*([^{}]*\{[^{}]*\}[^{}]*)*[^{}]*\}塊匹配({後跟零個或多個字符,除了{和}後跟零個或更多的塊與任何數量的前面和後面的各字符)

\s*catch\s*\([^()]*(\([^()]*\))*\)零個或多個空格匹配之前和之後的catch ,然後裏面的東西括號()

\s*\{[^{}]*([^{}]*\{[^{}]*\}[^{}]*)*[^{}]*\}類似嘗試阻止

注:可能在失敗個案的評論包含{ s或} s