2013-04-16 20 views

Antwort

9

Etwas wie folgt vor:

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 wird:

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

Dies ist eine coole Antwort – Patashu

+2

+1 für tolle Lösung. –

1

So etwas so:

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

C:\\Test-Processed\1\2 ergibt. Der reguläre Ausdruck geht davon aus, dass die Elemente, die Sie immer entfernen wollen, indem eine oder mehr Ziffern vorangestellt sind. Es wird diese Ziffern in einer Capture-Gruppe setzen und die Unterkette (Beispiel 1-Entwicklung) nur mit der Ziffer (1) ersetzen.

EDIT: Wenn die Annahme fehlschlägt, könnte man den Ansatz @Patashu vorgeschlagen nehmen wollen.

4

Die wichtigste Erkenntnis ist hier die Existenz einer indexOf, die die Zeichenfolge an einem bestimmten Punkt in der Zeichenfolge als von Anfang an, sondern beginnt mit der Suche. Hier: http://msdn.microsoft.com/en-us/library/7cct0x33.aspx

First off, möchten Sie .indexOf("-Processed") verwenden, um den ersten Index von -Processed in der Zeichenfolge zu finden. Merken Sie sich diesen Index.

Verwenden Sie jetzt .indexOf("-Processed", index+1), um den nächsten Index von -Processed zu finden, der nicht der erste ist.

Wiederholen Sie das und Substring(nextindex, "-Processed".Length), um diese zusätzlichen Instanzen zu entfernen, bis Sie nicht mehr finden.

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

Dies ist eine der oben angegebenen Lösungen. (Lösung von Habib und Parameterbenennung von Pintu Paul). Ich habe es benutzt, aber dann die Funktion als String Extension definiert.


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); 
    } 
} 
Verwandte Themen