我不是Regex-Ninja,并且想知道是否有可能重构我的代码以将Sinata样式路由/:foo/:bar
转换为.NET样式路由/{foo}/{bar}
。以下代码是我目前的实现,希望有一个更清洁(可能是正则表达式?)的解决方案。
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;
}
答案 0 :(得分:2)
这就是你的意思:
var replace = Regex.Replace("/bar/:foo/:lar", "/:([^/]*)", "/{$1}");