C#正規表示式(RegEx)高階應用之分組(Group)替換(Replace)

iDotNetSpace發表於2009-04-13

今天,說一下 .NET 裡面 正則 使用的稍微高階一些的技巧:分組替換 ,下面我們舉兩個例項來說明這個問題:

一段字串,把其中出現的 Ax,Ay 形式的內容,替換為 Ax 的形式(也就是 ,和Ay 都不要了),其中x 和y是數字,位長是 1~2,並且不會出現連排的形式

對於上面的需求,我們進行分析後,可以得出:上面的匹配規則,分為2組,(Ax) 一組,(,Ay) 一組  匹配後,直接返回第一組就OK了

對於.NET來說,分組替換的實現,有多種方式,我這裡展示其中的2種,對於上面的例子,我使用 MatchEvaluator 方式

static string CustomReplace(System.Text.RegularExpressions.Match m) 
{ 
    return m.Groups[1].Value; //直接返回分組1
}

string sourceString = "....."; 
string pattern = @"(A\d{1,2})(,A\d{1,2})"; 
System.Text.RegularExpressions.MatchEvaluator myEvaluator = new System.Text.RegularExpressions.MatchEvaluator(CustomReplace); 
System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(pattern, System.Text.RegularExpressions.RegexOptions.IgnoreCase| System.Text.RegularExpressions.RegexOptions.Multiline); 

string resultString = reg.Replace(sourceString, myEvaluator); 

需求是需要對這個FLASH的程式碼進行自定義,將 寬度 替換為自定義的值

對於這個例子,我們使用分組號 $# 的方式來實現,#代表數字,經過分析,可以得出,將上面的內容,分為3組

string sourceString = "......";
string toWidth = "300"; //自定義的寬度
string pattern = "(;
System.Text.RegularExpressions.Regex reg = new System.Text.RegularExpressions.Regex(pattern, RegexOptions.IgnoreCase | RegexOptions.Multiline);
string resultString = reg.Replace(sourceString, "${1}" + toWidth + "${3}");
    <embed>

為了區分分組編號和普通字元,可以用{}標註分組號

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/12639172/viewspace-567493/,如需轉載,請註明出處,否則將追究法律責任。

相關文章