使用包含特殊字符的.net正则表达式解析字符串,例如“<>”

时间:2014-07-14 17:22:26

标签: regex parsing keyword

伙计们,我想解析一个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;”作为一个整体返回值类型?

1 个答案:

答案 0 :(得分:0)

正则表达式似乎有点矫枉过正;一个更简单的方法应该有效:

(?m)(?<oc>\\[OperationContract.*?\\]$)|(?<n1>^.*;$)

示例:

<强> http://ideone.com/z0ve0O

模式:

<强> http://regex101.com/r/vM8uZ5/1