如何在给定目录中提取前面的字符串

时间:2019-01-15 16:16:51

标签: c#

文件夹名称是可变的,但我在目录中有此常量值-“分发”文件夹。

如何提取“发行版”文件夹之前的所有字符串?

> /<root>/win/<usr>/distributions/<dbms>/<repository>/<port
> type>/<remote system>/<port>

目前,我正在做很长的工作(例如,获取整个目录的长度,查找字符串中分发单词的位置等)。

我正在寻找一种更优雅的方式。可以使用Regex或我当前实现的较短版本来完成此操作吗?

4 个答案:

答案 0 :(得分:1)

string.Split和TakeWhile可以帮助您

var resultArray = str.Split(new []{@"/"},StringSplitOptions.RemoveEmptyEntries)
                                  .TakeWhile(x=>!x.Equals("distributions"));

输出

<root> 
win 
<usr> 

根据评论进行更新

如果您需要基于整个路径的“发行版”,则可以使用

var result = str.Split(new []{@"distributions"},StringSplitOptions.RemoveEmptyEntries)
                                .First();

输出

/<root>/win/<usr>/

答案 1 :(得分:0)

string.split('/')会将路径(或任何字符串)的每个“组成部分”放入数组中,并用定界符(/在此处)进行分隔。然后可以遍历它。

答案 2 :(得分:-1)

假设您确实想要直到那条路,我建议在这里使用正则表达式来解决问题。

   Regex regex = new Regex(@".+?(?=distributions)");
   Debug.WriteLine(regex.Match("/<root>/win/<usr>/distributions/<dbms>/<repository>").Value);

此输出      /<root>/win/<usr>/

答案 3 :(得分:-1)

好的旧方法有什么问题?

var s = "/<root>/win/<usr>/distributions/<dbms>/<repository>/<port.....";
var result = s.Substring(0, s.IndexOf("distributions"));

s.Substring(0, s.IndexOf("/distributions/")+1),如果该文本也可能以其他形式出现...