文件夹名称是可变的,但我在目录中有此常量值-“分发”文件夹。
如何提取“发行版”文件夹之前的所有字符串?
> /<root>/win/<usr>/distributions/<dbms>/<repository>/<port
> type>/<remote system>/<port>
目前,我正在做很长的工作(例如,获取整个目录的长度,查找字符串中分发单词的位置等)。
我正在寻找一种更优雅的方式。可以使用Regex或我当前实现的较短版本来完成此操作吗?
答案 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)
,如果该文本也可能以其他形式出现...