2011-02-13 109 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