正则表达式识别包含在.cs文件中的Try-Catch和Try-Catch finally块

时间:2013-02-23 03:43:20

标签: c# .net regex io

您好我正在尝试创建一个应用程序来帮助我切换我的Catch-Block的测试内容并用生产内容替换它们。我能够通读我的文件并解析内容,但是在创建正则表达式时遇到问题(我还是新手)以识别try-catch块,所以我可以选择删除或更改内容抓住了。有人能帮我解决这个问题吗?

到目前为止,我有以下表达式(根本不起作用)

try{*}catch(*){*)

提前致谢。

3 个答案:

答案 0 :(得分:3)

你不能写一个这样做的正则表达式,因为正则表达式can't be used to match nested patterns。这意味着它将无法识别您的右大括号何时与代码中的其他嵌套大括号相对应。您将需要一个解析器生成器,如ANTLR,就像链接的答案建议实现这一点。

答案 1 :(得分:1)

我建议看一下正在开发中的微软Roslyn compiler。它的API应该可以让你完成你想做的任何事情。它目前正在预览中。

答案 2 :(得分:0)

我认为这可以帮助您找到解决方案:

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

try\s*匹配try后跟零或多个空格。

\{[^{}]*([^{}]*\{[^{}]*\}[^{}]*)*[^{}]*\}匹配一个块({后跟零个或多个字符,除了{和}后跟零个或多个块,每个块前面和后面都有任意数量的字符)

\s*catch\s*\([^()]*(\([^()]*\))*\)匹配catch之前和之后的零个或多个空格,然后括号内()

\s*\{[^{}]*([^{}]*\{[^{}]*\}[^{}]*)*[^{}]*\}类似于try block

注意:如果评论包含{ s或} s

,则可能会失败