C# 从字符串中删除部分路径
考虑以下字符串C# 从字符串中删除部分路径,c#,regex,C#,Regex,考虑以下字符串 string path = @"\\ParentDirectory\All_Attachments$\BATCH_NUMBERS\TS0001\SubDirectory\FileName.txt"; 我试图通过删除\\ParentDirectory\All\u Attachments$\来修改路径。所以我希望我的最后一个字符串看起来像: BATCH_NUMBERS\TS0001\SubDirectory\FileName.txt 我提出了以下regex string patt
string path = @"\\ParentDirectory\All_Attachments$\BATCH_NUMBERS\TS0001\SubDirectory\FileName.txt";
我试图通过删除\\ParentDirectory\All\u Attachments$\
来修改路径。所以我希望我的最后一个字符串看起来像:
BATCH_NUMBERS\TS0001\SubDirectory\FileName.txt
我提出了以下regex
string pattern = @"(?<=\$)(\\)";
string returnValue = Regex.Replace(path, pattern, "", RegexOptions.IgnoreCase);
所以它只能删除
\
,有人能告诉我如何实现这一点吗 您可以结合使用Substring()
和IndexOf()
来实现您的目标:
string result = path.Substring(path.IndexOf("$") + 1);
您可以结合使用
Substring()
和IndexOf()
来实现您的目标:
string result = path.Substring(path.IndexOf("$") + 1);
使用一个正则表达式,该正则表达式接受前两组(反斜杠,后跟一个或多个非反斜杠)。包括
$
和后面的反斜杠
string returnValue = Regex.Replace(path, @"^(?:\\+[^\\]+){2}\$\\", "");
或者在$
上拆分,在不包含第一个元素的情况下加入字符串数组,然后从一开始修剪\
:
string returnValue = string.Join(null, path.Split('$').Skip(1)).TrimStart('\\');
但是您将使用System.Linq来实现该方法。使用一个正则表达式,该正则表达式接受前两组(反斜杠,后跟一个或多个非反斜杠)。包括
$
和后面的反斜杠
string returnValue = Regex.Replace(path, @"^(?:\\+[^\\]+){2}\$\\", "");
或者在$
上拆分,在不包含第一个元素的情况下加入字符串数组,然后从一开始修剪\
:
string returnValue = string.Join(null, path.Split('$').Skip(1)).TrimStart('\\');
但是您将使用System.Linq来实现该方法。下面的代码应该可以实现这一点
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);
在中执行时,它会给出以下结果:
批次号\TS0001\SubDirectory\FileName.txt
下面的代码应该可以做到这一点
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);
在中执行时,它会给出以下结果:
批次号\TS0001\SubDirectory\FileName.txt
作为避免重新或拆分/联接的替代方法,您可以沿着字符串运行,直到看到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;
}
字符串结果=null;
for(int i=0,m=0;i
作为避免重新或拆分/联接的替代方法,您可以沿着字符串运行,直到看到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;
}
字符串结果=null;
for(int i=0,m=0;i
一般规则是什么?是否要删除前两个名称可变的目录?@AlexK。是,我要删除前两个命名目录第一个目录是否始终以\\开头,或者有效路径是否为C:\Foo\Bar?@Stuart它将始终以\\开头不需要正则表达式。可以使用string方法:string result=string.Join(“\\”,path.Split(新字符[]{\\},StringSplitOptions.removeMptyEntries)。跳过(2));一般规则是什么?是否要删除前两个名称可变的目录?@AlexK。是,我要删除前两个命名目录第一个目录是否始终以\\开头,或者有效路径是否为C:\Foo\Bar?@Stuart它将始终以\\开头不需要正则表达式。可以使用string方法:string result=string.Join(“\\”,path.Split(新字符[]{\\},StringSplitOptions.removeMptyEntries)。跳过(2));这将导致\BATCH\u NUMBERS\TS0001\SubDirectory\FileName.txt
不认为OP想要第一个\,可能是path.indexof($)+2?感谢您的帮助我很高兴能提供帮助这将导致\BATCH\u NUMBERS\TS0001\SubDirectory\FileName.txt
不认为OP想要第一个\,可能是path.indexof($)谢谢你的帮助谢谢你的帮助谢谢你的帮助谢谢你的帮助谢谢你的帮助谢谢你的帮助谢谢你的帮助谢谢你的帮助谢谢你的帮助谢谢你的帮助