考虑以下字符串
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
所以它只删除\
有人可以告诉我如何实现这一点。
答案 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;
}