伙计们,我想解析一个WCF服务接口源代码,以生成其Begin,End样式的异步版本。即从下面的版本:
[ServiceContract]
public interface IExamManageService
{
[OperationContract]
void NewExam(ExamData ed);
...
}
生成这样的新版本:
[ServiceContract]
public interface IExamManageService
{
[OperationContract(AsyncPattern = true)]
IAsyncResult BeginNewExam(ExamData ed, AsyncCallback callback, object state);
void EndNewExam(IAsyncResult result);
}
我使用正则表达式来完成解析任务。匹配模式是:
@"(?<oc>\[OperationContract.*?\])\s*?\r\n\s+?(?<ret>[\w\d_]+)\s+?(?<nam>[\w\d_]+?)\(((?<pn>[\w\d_]+?)\s+?(?<pv>[\w\d_]+?)(\s*?,\s*?)?)*?\);"
直到它遇到这个声明它才顺利:
IEnumerable<Guid> GetIDCollection();
然后解析器不工作。有没有什么好主意捕获这篇文章“IEnumerable&lt; Guid&gt;”作为一个整体返回值类型?
答案 0 :(得分:0)
正则表达式似乎有点矫枉过正;一个更简单的方法应该有效:
(?m)(?<oc>\\[OperationContract.*?\\]$)|(?<n1>^.*;$)
示例:
<强> http://ideone.com/z0ve0O 强>
模式: