2015-06-19 108 views
1

我們正試圖編寫一個程序來存儲項目的所有變量,參數,方法,類名等。然後我們用正確的名字替換方法。 基本上我使用Directory.GetFiles()StreamReader來讀出.CS文件。比方說,下面是我們從讀出那些.CS文件得到了結果:通過前綴和分段查找帶有RegEx的字符串

string Code = @"public static void _MET_ClassName_MethodName() { var _VAR_MethodName_Foo = \"Test\"; }"; 

在現實中的字符串Code是很長的,幷包含更多的方法和變量定義。最後,我將添加參數和類名稱。

我想獲得RegEx的方法和變量名稱,雖然沒有任何工作,我不知道如何實現我想要的。符號名稱包含以下內容:_ABC_Segment1_Segment2。 ABC可以是任何3個字母的值,Segment1和Segment2將總是隻包含字母數字字符(這些分段的長度是可變的),並且下劃線總是在那裏。

我試着閱讀RegEx並使用regexr.com來「試用」,雖然我從來沒有遠到過。任何幫助表示讚賞。

下面我嘗試:

/_MET_([A-Z]\w+)/g 

這不是變量由於具有在那裏固定_MET_和它不會使在SEGMENT1和分段2的差。

+0

它是多麼重要的變量,方法等*清單*準確*?它可能更適合使用代碼分析器而不是過濾文本。 – hometoast

回答

2

下面將做:

_[A-Za-z]{3}_[A-Za-z0-9]*_[A-Za-z0-9]* 

擊穿

_     //match first underscore 
[A-Za-z]{3}  //match 3 alpha characters 
_     //match separator underscore 
[A-Za-z0-9]*  //match any alpha-numeric string (segment1) 
_     //match another underscore 
[A-Za-z0-9]*  //match alphanumeric string (segment2) 

可替換地,因爲它看起來像在第一部分(MET或VAR)可能是從可接受值的一小部分,如果您只想匹配該部分字符串中的幾個值,則以下方法可行:

_(MET|VAR)_[A-Za-z0-9]*_[A-Za-z0-9]* 

(MET|VAR)部分匹配MET或VAR。

+0

感謝您的詳細描述。像缺陷一樣工作,我可以從中學習。 – Roel

相關問題