Regex如果用的好,可以增進系統的效能,還可以達到程式的優化。
但其實Regex是一個不好學的東西,因為它沒有那麼的直覺,是真的需要花很多時間去了解。
下面我就來分享如何使用REGEX的技巧:
假設我們有個需求,是透過幾段字串裡面,編排出找尋位置的方法,例如下面的字串:
$MAP
MAP "1" 1234
MAP "2" 5678
MAP "3" 9101
$POSIITION 1234
POSITION "A2" PARAM "1" "2"
POSITION "B4" PARAM "2" "1"
POSITION "C1" PARAM "3" "1"
$POSITION 5678
POSITION "D4" PARAM "1" "2"
POSITION "E2" PARAM "2" "1"
POSITION "F1" PARAM "3" "1"
在第一行上面可以看到有一個MAP的關鍵字,它有一整行看起來很有規則的文字,然後下面的POSITION,我們就可以利用這一段的文字,來取出一些關鍵的參考:
//定義一個可變動的索引值
string num = "1";
Regex rgx = new Regex(@"\sMAP\s\s\w*""" + num + @"""\s\s\w*\s\s\w*\w*""\d""");
//然後我可以辦識的結果取出
Match match = rgx.Match(line);
if (match.Success)
{
Console.WriteLine("Regex:{0}", match.Value);
}
在上面的一段程式,透過REGEX的處理,我們可以取到一段像這樣的結果:
上面的一段@"\sMAP\s\s\w*""" + num + @"""\s\s\w*\s\s\w*\w*""\d"""
我們可以這樣解讀:
1.\sMAP\s\s:空白字元旁邊有一個MAP然後兩個空白字完。
2.\w*""" + num + @""":空白字元旁邊的"1"字元。
3.\s\s\w*\s\s\w*\w*""\d"":空白字元後面的字元。
這樣就可以搜尋到相關的字串,然後我們就可以把字串批配到另一段我們想要的參數上:
//如果找到符合的Keyword,就進入判斷
if (match.Success)
{
string keysearch = match.Value;
//透過REGEX取出想要的值
rgx = new Regex(@"\sMAP\s\w*\""" + num + @"""\s\s");
//把不要的部分取代
string result = rgx.Replace(keysearch, "");
}
這樣就會找到我們要參數
這種技巧其實可以運用在很多的開發層面上,尤其是搜尋引擎,熟練這樣的寫法,可以寫出令人讚嘆的程式喔。
下面是我的範例下載,有興趣可以下載來研究看看:
https://code.msdn.microsoft.com/C-REGEX-Regular-Expression-a72e0208
-雲遊山水為知已、逍遙一生而忘齡- 電腦神手
沒有留言:
張貼留言