2011-02-13 146 views
1

我不是正則表達式忍者,並想知道是否有可能重構我的代碼轉換Sinata風格路線/:foo/:bar到.NET風格路線/{foo}/{bar}。下面的代碼是我目前的實現,希望有一個更清潔(也許是正則表達式?)解決方案。Sinatra路由轉換爲.NET路由

private static string Convert(string input) 
    { 
     string output = "/"; 
     var segments = input.Split(new[] { '/' }, StringSplitOptions.RemoveEmptyEntries); 

     foreach (var segment in segments) 
      if (segment.StartsWith(":")) 
       output += "{" + segment.TrimStart(':') + "}/"; 
      else 
       output += segment + "/"; 

     if (output.Length > 1) 
      output = output.TrimEnd('/'); 

     return output; 
    } 

回答

2

難道這就是你的意思是:

var replace = Regex.Replace("/bar/:foo/:lar", "/:([^/]*)", "/{$1}"); 
+0

真棒,謝謝! – 2011-02-14 22:35:31