最.NET樣式的方法是
var regex = new Regex(@"^(?<first>.*?):(?<second>.*)$", RegexOptions.Compiled);
Console.WriteLine(regex.Replace("moon:glow", "${second}:${first}"));
將打印
glow:moon
您還可以使用順序引用,就像這樣:
Console.WriteLine(regex.Replace("moon:glow", "$2:$1"));
混業經營是確定。
相反對Perl你可以單獨檢索所有匹配的值反覆原子,像例如: -
var regex = new Regex(@"^((?<token>.*?):)*", RegexOptions.Compiled);
foreach (Capture token in regex
.Match("moon:glow:is:the most:beautiful:thing")
.Groups["token"].Captures)
Console.WriteLine(token.Value);
輸出
moon
glow
is
the most
beautiful
爲了獲得先進的匹配評估,你會做如
var upper = Regex.Replace("moon:glow:is:the most:beautiful:thing", "(.*?)(:|$)",
m => m.Groups[1].Value.ToUpper() + m.Groups[2]);
Console.WriteLine(upper);
不幸的是,我看不出有什麼簡單的方法來配置這樣的評價函數爲純文本(使用編譯器作爲一種服務,這是我所知道的是可在單聲道時除外,但我不是在MS十分肯定。淨尚未)
OP應該如何將其轉換爲通用的方式來接受他的應用程序中的用戶定義的替換定義。你的例子做了一個開關。他的例子修改案例。 – 2011-04-07 20:57:13
錯過了。新增 – sehe 2011-04-07 21:09:49
+1與OP一樣,您也不認爲提供一個用戶界面來替代將由C#RegEx執行的替換的通用規範是非常簡單的。 – 2011-04-07 21:30:09