C#剥离出所需的字符串

时间:2012-03-29 12:32:03

标签: c#

好的,我有这些字符串

 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#中做到这一点...任何想法

4 个答案:

答案 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]);