2012-05-08 79 views
0

我對正則表達式不太擅長,所以我需要一個正則表達式的幫助,這個正則表達式將從word doc中提取所有C函數聲明。我已經將文檔加載到內存中並閱讀了文本,所以這不是問題。而且,所有函數都以INTERNAL_開頭,顯然以結尾);例如正則表達式提取所有函數聲明

INTERNAL_DisplayMessage(param a,int b);所以基本上,我需要一個正則表達式,它將從INTERNAL_中提取整個函數聲明爲;。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。所有API的返回值都是相同的,所以這是不相關的。

+2

你嘗試過什麼嗎?爲什麼它不工作? –

+0

'MatchCollection results = Regex.Matches(text,@「\(([^)] *)\)」);' 這就是我試過的,我真的不擅長正則表達式,從來不用那些。這個正則表達式讓我在()中得到了一切,我試圖弄清楚如何獲得INTERNAL_和);進入這個表達式。 – tunafish24

+1

請發佈一個問題,而不是任務請求 – 2012-05-08 22:28:00

回答

2

一些簡單的(INTERNAL_.+?\);)應該可以工作。我強烈建議RegExr這些類型的任務。

+0

多數民衆贊成在不工作...我什麼都沒有得到任何匹配。 – tunafish24

+0

那麼您可以向我們展示文本,還是其中的一小部分?當我用你的初始文章的正則表達式運行你的代碼時,我會得到2場比賽。 –

+0

因爲,它的內部文件,我不能張貼在這裏,但下面是粗糙的格式: '這是方法的,將被稱爲 INTERNAL_MethodA(\ n \t INT參數1,\ n \t INT注意:請仔細調用此方法。' – tunafish24

2

您需要使用這個表達式:

(INTERNAL_[^ ]+?\s?\(.*?\);) 

外括號做一個函數的所有文字,以得到一組內抓獲。

功能聲明圓括號用反斜槓\(\)轉義,以便它們被視爲文字而不是分組。

[^ ]\s?指任何字符這不是空間,一個或更多次,就在左括號

.*?之前通過一個可選的空間follorwed指任何字符,*任何次數(包括O),至少與可能

當你的函數的聲明包括\ n在他們裏面,你需要使用RegexOptions.Singleline選項的正則表達式構造函數的第二個參數來創建你的正則表達式:

指定單線模式。更改點(。)的含義,使其匹配每個字符(而不是除\ n之外的每個字符)。

見文件在:RegexOptions Enumeration

一個好地方,赤正則表達式是這樣的一個:

www.regexplanet.com

它允許您更改語言並設置選項。對於SinleLine選項,請選中「點(。)」匹配每個字符,而不是匹配該頁面上除換行符(單行)之外的每個字符。

+0

+1這應該比我的答案少出現誤報,因爲它需要打開和關閉括號。 –

+0

這並不會返回任何結果,即使在您提到的網站上也沒有。請嘗試使用換行符,我仍然在修改參數 - 基本上是蠻力的方法。 – tunafish24

+0

是的,這對我很有用。這是一個更好的解決方案,我提出的'[^]'黑客攻擊。 –