繁体   English   中英

C#剥离所需的字符串

[英]C# stripping out the string needed

好,我有这些琴弦

 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#中执行此操作...任何想法

这是使用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]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM