我需要修剪百万字符串中的路径,如下所示:
C:\workspace\my_projects\my_app\src\my_component\my_file.cpp
到
src\my_component\my_file.cpp
即。删除路径的绝对部分,最快的方法是什么?
我尝试使用正则表达式:
Regex.Replace(path, @"(.*?)\src", ""),
答案 0 :(得分:4)
我不会使用正则表达式,使用普通的旧方法。
如果路径前缀始终相同:
const string partToRemove = @"C:\workspace\my_projects\my_app\";
if (path.StartsWith(partToRemove, StringComparison.OrdinalIgnoreCase))
path = path.Substring(partToRemove.Length);
如果前缀是可变的,您可以获得\src\
的最后一个索引:
var startIndex = path.LastIndexOf(@"\src\", StringComparison.OrdinalIgnoreCase);
if (startIndex >= 0)
path = path.Substring(startIndex + 1);
答案 1 :(得分:2)
使用new定义正则表达式并重新使用它 创建正则表达式会产生(重大)成本
string input = "This is text with far too much " +
"whitespace.";
string pattern = "\\s+";
string replacement = " ";
Regex rgx = new Regex(pattern);
string result = rgx.Replace(input, replacement);
答案 2 :(得分:0)
不能认为比这更快
path.Substring(33);
src
之前的内容是不变的。它从索引33开始。
C:\workspace\my_projects\my_app\src\my_component\my_file.cpp
^
如果不总是不变的话。你可以找到一次。并在循环中完成其余的工作。
int startInd = path.IndexOf(@"\src\") + 1;
// Do this inside loop. 1 million times
path.Substring(startInd);
答案 3 :(得分:0)
如果您的文件都以“src / filename.ext”结尾,那么您可以在.NET框架中使用Path类来解决它,并解决您对pathes和文件名的所有警告:
result = "src\" + Path.GetFileName(path);
因此,您应首先仔细检查转换是否需要很长时间。
答案 4 :(得分:0)
我不确定你是否需要速度,但如果总是获得完整路径,你可以做一个简单的.Substring()
var path = @"C:\workspace\my_projects\my_app\src\my_component\my_file.cpp";
Console.WriteLine(path.Substring(32));
但是,我认为你应该首先清理你的输入;在这种情况下,Uri
类可以执行解析步骤:
var root = @"C:\workspace\my_projects\my_app\";
var path = @"C:\workspace\my_projects\my_app\src\my_component\my_file.cpp";
var relative = new Uri(root).MakeRelativeUri(new Uri(path));
Console.WriteLine(relative.OriginalString.Replace("/", "\\"));
请注意,Uri
会将\
更改为/
:.Replace
原因。