从字符串中删除部分路径

时间:2017-07-03 11:20:08

标签: c# regex

考虑以下字符串

string path = @"\\ParentDirectory\All_Attachments$\BATCH_NUMBERS\TS0001\SubDirectory\FileName.txt";

我正在尝试删除\\ParentDirectory\All_Attachments$\来修改路径。所以我希望我的最终字符串看起来像:

BATCH_NUMBERS\TS0001\SubDirectory\FileName.txt

我想出了以下regex

string pattern = @"(?<=\$)(\\)";

string returnValue = Regex.Replace(path, pattern, "", RegexOptions.IgnoreCase);

如果我做Console.WriteLine(returnValue),我会得到

\\ParentDirectory\All_Attachments$BATCH_NUMBERS\TS0001\SubDirectory\FileName.txt

所以它只删除\有人可以告诉我如何实现这一点。

4 个答案:

答案 0 :(得分:2)

下面的代码可以解决问题。

string path = @"\\ParentDirectory\All_Attachments$\BATCH_NUMBERS\TS0001\SubDirectory\FileName.txt";
var result = Regex.Replace(path, 
@"^      # Start of string
[^$]+    # Anything that is not '$' at least one time
\$       # The '$ sign
\\       # The \ after the '$'
", String.Empty, RegexOptions.IgnorePatternWhitespace);

LinqPad执行时,会产生以下结果:

  

BATCH_NUMBERS \ TS0001 \子目录\ FILENAME.TXT

答案 1 :(得分:0)

您可以使用Substring()IndexOf()的组合来实现目标:

string result = path.Substring(path.IndexOf("$") + 1);

答案 2 :(得分:0)

使用带有前两组的正则表达式(反斜杠后跟一个或多个非反斜杠)。并包括$和反斜杠。

string returnValue = Regex.Replace(path, @"^(?:\\+[^\\]+){2}\$\\", "");

或者通过拆分$,加入字符串数组而不使用它的第一个元素,然后从头开始修剪\

string returnValue = string.Join(null, path.Split('$').Skip(1)).TrimStart('\\');

但是您将使用System.Linq来使用该方法。

答案 3 :(得分:0)

作为避免RE或分割/连接的替代方法,你可以沿着字符串运行,直到你看到4个斜杠:

string result = null;
for (int i = 0, m = 0; i < path.Length; i++)
    if (path[i] == '\\' && ++m == 4) {
        result = path.Substring(i + 1);
        break;
    }