2014-07-14 38 views
0

夥計們,我想解析一個WCF服務接口源代碼以生成其異步版本的Begin,End樣式。即從以下版本:使用.net正則表達式解析包含特殊字符的字符串,如「<>」

[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 <Guid>」作爲一個整體的返回值類型?

回答

0

正則表達式似乎有點矯枉過正;一個更簡單的辦法應該工作:

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

例子:

http://ideone.com/z0ve0O

模式:

http://regex101.com/r/vM8uZ5/1

+0

你說得對,我不擅長使用正則表達式愚蠢地用[\ w \ d_]排除<>而不是到它。您的主頁是regex101嗎?測試正則表達式非常酷。我收集了它。謝謝。 –

相關問題