-1

次の文字列の例があります。

\\servername\Client\Range\Product\

servername、、、、およびvalesは何でもかまいませんがClient、サーバー上のtasamba共有を表すだけです。RangeProduct

これらのパスの1つを使用して、4番目までのすべてを新しいパスでリレースできるようにしたいと思い\ます。例:

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

\\10.0.1.1\Archive\001\0012\

取得するすべてのパスは同じ開始パターン\\servername\Client\に従います。C#を使用して、4番目の "\"までの文字列内のすべてを置き換えるにはどうすればよいですか?

私は正規表現の使用を検討しましたが、その驚異と力を理解することはできませんでした

4

6 に答える 6

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
于 2012-09-04T13:21:56.237 に答える
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);
于 2012-09-04T13:18:37.280 に答える
1

String.Formatまたはを使用できますPath.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\
于 2012-09-04T13:19:27.380 に答える
1

エレガントな正規表現ソリューションは次のようになります。

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

これは、単一のスラッシュの後ろにある文字列の一部を「アーカイブ」文字列に置き換えます。

ここでこのコードをテストします。

于 2012-09-04T13:27:48.667 に答える
0

文字列メソッドは機能しますが、正規表現よりも冗長になる可能性があります。文字列の先頭から4番目までのすべてを一致させたい場合は、次の正規表現がそれを行います(文字列が提供されたパターンを満たしていると仮定します)

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

したがって、次のようなコードがあります

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

トリックを行う必要があります。

于 2012-09-04T13:25:54.440 に答える
0

これは、4つの部分だけについて話している限り、簡単で高速です。

string example = @"\\10.0.1.1\ITClient\001\0012\";
string[] parts = example.Split(new string[] { @"\" }, StringSplitOptions.RemoveEmptyEntries);
于 2012-09-04T13:26:27.640 に答える