2013-04-16 10 views

答えて

9

何か:

string originalStr = "C:\\Test-Processed\\1-Processed\\2-Processed"; 
string temp = "-Processed"; 
string str = originalStr.Substring(0, originalStr.IndexOf(temp) + temp.Length); 
originalStr = str + originalStr.Substring(str.Length).Replace(temp, ""); 

originalStrは次のようになります。

originalStr = "C:\\Test-Processed\\1\\2" 
+2

これはクールな回答 – Patashu

+2

+1素晴らしいソリューションです。 –

1

何か:

String str = @"C:\\Test-Processed\1-Processed\2-Processed"; 
System.Console.WriteLine(new Regex("(\\d+)-Processed").Replace(str, "$1")); 

C:\\Test-Processed\1\2が得られます。正規表現では、削除する要素の前に常に1つ以上の桁があることが前提です。それらの数字をキャプチャグループに入れ、サブストリング(例1-処理済み)を数字(1)だけに置き換えます。

EDIT:仮定がうまくいかない場合は、@Patashuの提案に従ってください。

4

ここで重要なのは、開始点からではなく文字列内の特定の点で文字列の検索を開始するindexOfの存在です。ここで:http://msdn.microsoft.com/en-us/library/7cct0x33.aspx

最初に、.indexOf("-Processed")を使用して、文字列に-Processedの最初のインデックスを探します。このインデックスを忘れないでください。

.indexOf("-Processed", index+1)を使用して、次のインデックス-Processedが最初に見つからないことを確認してください。

これを繰り返すと、これらの余分なインスタンスが削除され、それ以上見つからなくなるまで、Substring(nextindex, "-Processed".Length)が削除されます。以下のような

1
string ReplaceExceptFirst(string text, string search, string replace) 
{ 
    int pos = text.IndexOf(search); 
    if (pos < 0) 
    { 
     return text; 
    } 

    int strlen = pos + search.Length; 
    return text.Substring(0, strlen) + (text.Substring(strlen)).Replace(search,replace); 
} 
0

これは上記のソリューションの1つです。 (ハビブによる解決法とPintu Paulによるパラメータ命名法)。私はそれを使用したが、その関数をString Extensionとして定義した。


public static class StringExtensions 
{ 
    public static string ReplaceAllButFirst(this string originalStr, string search, string replace) 
    { 
     string str = originalStr.Substring(0, originalStr.IndexOf(search, System.StringComparison.InvariantCultureIgnoreCase) + search.Length); 
     return str + originalStr.Substring(str.Length).Replace(search, replace); 
    } 
} 
関連する問題