基於表達式的模式
完成上例中的功能的另一條途徑是通過一個MatchEvaluator,新的代碼如下所示:
static string CapText(Match m)
{
//取得匹配的字符串
string x = m.ToString();
// 如果第一個字符是小寫
if (char.IsLower(x[0]))
// 轉換為大寫
return char.ToUpper(x[0]) + x.Substring(1, x.Length-1);
return x;
}
static void Main()
{
string text = "the quick red fox jumped over the
lazy brown dog.";
System.Console.WriteLine("text=[" + text + "]");
string pattern = @"\w+";
string result = Regex.Replace(text, pattern,
new MatchEvaluator(Test.CapText));
System.Console.WriteLine("result=[" + result + "]");
}
同時需要注意的是,由於僅僅需要對單詞進行修改而無需對非單詞進行修改,這個模式顯得非常簡單。
為了能夠更好地理解如何在C#環境中使用規則表達式,我寫出一些對你來說可能有用的規則表達式,這些表達式在其他的環境中都被使用過,希望能夠對你有所幫助。
羅馬數字
string p1 = "^m*(d?c{0,3}|c[dm])" + "(l?x{0,3}|x[lc])(v?i{0,3}|i[vx])$";
string t1 = "vii";
Match m1 = Regex.Match(t1, p1);
交換前二個單詞
string t2 = "the quick brown fox";
string p2 = @"(\S+)(\s+)(\S+)";
Regex x2 = new Regex(p2);
string r2 = x2.Replace(t2, "$3$2$1", 1);
關健字=值
string t3 = "myval = 3";
string p3 = @"(\w+)\s*=\s*(.*)\s*$";
Match m3 = Regex.Match(t3, p3);