【发布时间】:2015-11-13 18:52:18
【问题描述】:
我正在搜索一个正则表达式来匹配文本中的所有 C# 方法,并且每个找到的方法的主体(称为“内容”)应该可以通过一个组访问。
上面的 C# 正则表达式仅在文本中恰好存在 ONE 方法时才会给出所需的结果。
原文:
void method1(){
if(a){ exec2(); }
else { exec3(); }
}
void method2(){
if(a){ exec4(); }
else { exec5(); }
}
正则表达式:
string pattern = "(?:[^{}]|(?<Open>{)|(?<Content-Open>}))+(?(Open)(?!))";
MatchCollection methods = Regex.Matches(source,pattern,RegexOptions.Multiline);
foreach (Match c in methods)
{
string body = c.Groups["Content"].Value; // = if(a){ exec2(); }else { exec3();}
//Edit: get the method name
Match mDef= Regex.Match(c.Value,"void ([\\w]+)");
string name = mDef.Groups[1].Captures[0].Value;
}
如果只有method1包含在source中,它可以完美运行,但是附加method2只有一个Match,你不能再提取单独的method-body对了。
如何修改正则表达式以匹配多个方法?
【问题讨论】:
-
如果中间有包含
{或}的cmets 怎么办?还是包含大括号的字符串文字?那么,这种方法就无效了。 -
你能解释一下你想准确捕捉什么吗? Content 是方法的内容,Open 是什么?需要方法定义吗?
-
@Lamour:看我的编辑
-
@stribizhev:太好了!你可以把它作为答案。事实上,我不是在寻找通用解决方案或解析器来找到所有类型的方法,我知道我的文本中可能会出现什么结构。
标签: c# regex regex-group