C#剥离所需的字符串

本文关键字:字符串 剥离 | 更新日期: 2023-09-27 18:29:19

好的,所以我有这些字符串

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

C#剥离所需的字符串

以下是如何使用Regex针对您的示例输入执行此操作:

Regex rgx = new Regex("'''d+");
string result = rgx.Replace(input, string.Empty);

正则表达式将在至少跟有一个数字的'上匹配并替换它们。但是您需要小心,因为如果您在字符串的其他地方有这种模式,它将不会保留字符串。

如果您的输入与您所描述的完全一样,那么使用string.Split可能会更高效(假设您需要删除的部分总是在最后一个之前的最后一个)。


更新:

只有当路径的单个部分以数字开头,而不是多个以数字开头但不以数字结尾的路径时,我提供的正则表达式才会起作用。

您提供的信息不足以构建一个可以随心所欲的正则表达式——例如,如何区分需要剥离的数字路径和不需要剥离的数值路径?

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);

看看Split()方法,它可以将字符串分解为分隔符。然后,您可以使用一些技术,如检查以DISK开头的最后一个部分,或检查纯整数的部分(如果较高的子目录是纯数字,则可能有风险——除非您从后面工作!)。

int i = int.Parse(location.Split(new string[] { "''" }, StringSplitOptions.RemoveEmptyEntries)[4]);