最初のオカレンス以外の文字列を置き換える方法は?最初のオカレンスを除く文字列の文字列を置き換える方法
C:\\Test-Processed\1-Processed\2-Processed
出力すべきそうのような
C:\\Test-Processed\1\2
最初のオカレンス以外の文字列を置き換える方法は?最初のオカレンスを除く文字列の文字列を置き換える方法
C:\\Test-Processed\1-Processed\2-Processed
出力すべきそうのような
C:\\Test-Processed\1\2
何か:
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"
何か:
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の提案に従ってください。
ここで重要なのは、開始点からではなく文字列内の特定の点で文字列の検索を開始するindexOfの存在です。ここで:http://msdn.microsoft.com/en-us/library/7cct0x33.aspx
最初に、.indexOf("-Processed")
を使用して、文字列に-Processed
の最初のインデックスを探します。このインデックスを忘れないでください。
.indexOf("-Processed", index+1)
を使用して、次のインデックス-Processed
が最初に見つからないことを確認してください。
これを繰り返すと、これらの余分なインスタンスが削除され、それ以上見つからなくなるまで、Substring(nextindex, "-Processed".Length)
が削除されます。以下のような
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);
}
これは上記のソリューションの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);
}
}
これはクールな回答 – Patashu
+1素晴らしいソリューションです。 –