如何用C#中的给定模式替换字符串的第一部分

时间:2012-09-04 13:14:14

标签: c# regex

我有以下字符串示例:

\\servername\Client\Range\Product\

servernameClientRangeProduct vales可以是任何内容,但它们只是代表服务器上的samba共享。

我希望能够采用其中一条路径并使用新路径将所有内容重新传输到第四个\:例如:

\\10.0.1.1\ITClient\001\0012\ will become:

\\10.0.1.1\Archive\001\0012\

我获得的所有路径将遵循相同的起始模式\\servername\Client\,使用C#如何将字符串中的所有内容替换为第4个“\”?

我已经看过使用正则表达式,但我从来没有能够理解它的奇迹和力量

6 个答案:

答案 0 :(得分:2)

此正则表达式模式将匹配第4个\

中的所有内容
^(?:.*?\\){4}

用法:

var result = Regex.Replace(inputString, @"^(?:.*?\\){4}", @"\\10.0.1.1\Archive\");

稍微阐明正则表达式:

^ // denotes start of line
 (?:…) // we need to group some stuff, so we use parens, and ?: denotes that we do not want to use the parens for capturing (this is a performance optimization)
 .*? // denotes any character, zero or more times, until what follows (\)
 \\ //denotes a backslash (the backslash is also escape char)
 {4} // repeat 4 times

答案 1 :(得分:1)

除非我遗漏了一些重要内容,否则你可以使用一个掩码并对其进行格式化:

static string pathMask = @"\\{0}\{1}\{2}\{3}\";

string server = "10.0.1.1";
string client = "archive";
string range = "001";
string product = "0012";

...

string path = string.Format(pathMask, server, client, range, product);

答案 2 :(得分:1)

您可以使用String.FormatPath.Combine

string template = @"\\{0}\{1}\{2}\{3}\";
string server = "10.0.1.1";
string folder = "Archive";
string range = "001";
string product = "0012";

string s1 = String.Format(template,
    server,
    folder,
    range,
    product);

// s1 = \\10.0.1.1\Archive\001\0012\

string s2 = Path.Combine(@"\\", server, folder, range, product);

// s2 = \\10.0.1.1\Archive\001\0012\

答案 3 :(得分:1)

优雅的正则表达式解决方案将是:

(new Regex(@"(?<=[^\\]\\)[^\\]+")).Replace(str, "Archive", 1);

“Archive”字符串替换单个斜杠后面的部分字符串。

测试此代码here

答案 4 :(得分:0)

字符串方法可行,但可能比正则表达式更冗长。如果你想匹配从字符串的开头到第4个\的所有内容,那么下面的正则表达式将会这样做(假设你的字符串符合提供的模式)

^\\\\[^\\]+\\[^\\]+\\

所以有些代码就像

string updated = Regex.Replace(@"\\10.0.1.1\ITClient\001\0012\", "^\\\\[^\\]+\\[^\\]+\\", @"\\10.0.1.1\Archive\");

应该做的伎俩。

答案 5 :(得分:0)

只要我们只讨论4个部分,这个很简单快捷:

string example = @"\\10.0.1.1\ITClient\001\0012\";
string[] parts = example.Split(new string[] { @"\" }, StringSplitOptions.RemoveEmptyEntries);