好的,我有这些字符串
location = "C:\\Users\\John\\Desktop\\399";
location = "C:\\Users\\John\\Desktop\\399\\DISK1";
location = "C:\\Users\\John\\Desktop\\399\\DISK2";
location = "\\somewhere\\on\\Network\\399\\DISK2";
如何从所有这些情况中剥离出399 ....仅供参考这个数字可能是2位数,如42,所以我不能抓住第一种情况下的最后3位....我在考虑一些正则表达式取出DISKn如果它存在并抓住数字直到数字之前\但我不知道如何在C#中做到这一点...任何想法
答案 0 :(得分:3)
以下是针对您的示例输入使用Regex执行此操作的方法:
Regex rgx = new Regex("\\\d+");
string result = rgx.Replace(input, string.Empty);
正则表达式将匹配\
后跟至少一个数字并替换它们。但是你需要小心,因为如果在字符串的其他地方有这种模式,它将不会保留字符串。
如果您的输入完全如您所述,使用string.Split
可以更有效率(假设您需要删除的部分始终是最后一个)。
更新
我提供的正则表达式只有在路径的单部分以数字开头,而不是多次或路径开始有数字但没有与他们结束。
您提供的信息不足以构建一个可以按照您的意愿执行的正则表达式 - 例如,如何区分需要删除的数字路径和不需要删除的数字路径?
答案 1 :(得分:2)
var parts = location.Split('\\');
var number = parts.Last().Starts("DISK") ? parts[parts.Length - 2] : parts[parts.Length - 1];
剥离编号:
var index = parts.Last().Starts("DISK") ? parts.Length - 2 : parts.Length - 1;
var newParts = parts.Take(index).Concat(parts.Skip(index + 1)).ToArray();
var newLocation = string.Join("\\", newParts);
答案 2 :(得分:0)
看看Split()方法在分隔符周围打破字符串。然后你可以使用诸如检查以DISK开头的最后一部分,或检查纯粹整数的部分(可能有风险,如果更高的子目录是纯数字 - 除非你从后面工作!)的技术。
答案 3 :(得分:0)
int i = int.Parse(location.Split(new string[] { "\\" }, StringSplitOptions.RemoveEmptyEntries)[4]);