2017-05-28 6 views
0

ich nur ein Wort Test und Leaf aus der angegebenen Zeichenkette entfernen möge entfernen beginnen, nicht von der anderen Seite, so Schnur Test_AA_234_6874_TestAA_234_6874_Test sein soll, aber wenn ich .Replace verwenden wird es Wort Test von überall ersetzen die i want.How es nicht zu tun Dies ist der Code, was ich esWie man einen Teil der Zeichenkette

string st = "Test_AA_234_6874_Test"; 
st = st.Replace("Test_",""); 
+0

'String.Join ("", st.Skip (5))' FYI, schlechte Leistung. Substring ist der Weg zu gehen. – Karolis

Antwort

4

Sie einen regulären Ausdruck verwenden, könnte dies zu tun, getan haben. Das dritte Argument der Regex replace method gibt an, wie oft Sie ersetzen möchten.

string st = "Test_AA_234_6874_Test"; 
var regex = new Regex("(Test|Leaf)_"); 
var value = regex.Replace(st, "", 1); 

Oder, wenn die Zeichenfolge an den Start ersetzen tritt nur gerade ^ verwenden, die die Position am Anfang des Strings behauptet.

string st = "Test_AA_234_6874_Test"; 
var regex = new Regex("^(Test|Leaf)_"); 
var value = regex.Replace(st, ""); 

Wenn Sie wissen, dass Sie immer in den ersten 5 Buchstaben entfernen haben Sie auch Substring verwenden können, die mehr performant ist.

string st = "Test_AA_234_6874_Test"; 
var value = st.Substring(5, st.Length - 5); 
1

Betrachten Sie überprüfen, ob die Zeichenfolge mit „Start“ beginnt und/oder endet mit „Trim“ und das Ende entscheiden und Startpositionen Sie möchten zu halten. Verwenden Sie dann die Substring-Methode, um nur den benötigten Teil zu erhalten.

public string Normalize(string input, string prefix, string suffix) 
{ 
    // Validation 
    int length = input.Length; 
    int startIndex = 0; 
    if(input.StartsWith(prefix)) 
    { 
     startIndex = prefix.Length; 
     length -= prefix.Length; 
    } 

    if (input.EndsWith (suffix)) 
    { 
     length -= suffix.Length; 
    } 

    return input.Substring(startIndex, length); 
} 

Hoffe, das hilft.

1

Der einfachste Weg, dies zu tun, ist mit einem Regulären Ausdruck wie folgt.

using System; 
using System.Text.RegularExpressions; 
using System.Text; 

namespace RegExTest 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      var input = "Test_AA_234_6874_Test"; 
      var matchText = "Test"; 
      var replacement = String.Empty; 

      var regex = new Regex("^" + matchText); 

      var output = regex.Replace(input, replacement); 

      Console.WriteLine("Converted String: {0}", output); 

      Console.ReadKey(); 

     } 
    } 
} 

Der ^ wird der Text am Anfang der Zeichenfolge übereinstimmen.

+1

In _my_ mind, die Wörter "einfach" und "regex" (geschweige denn "Leistung") nie abgestimmt. –

+0

@Uwekeim, vielleicht hast du noch viel zu lernen. –

1

Verwenden Sie einen regulären Ausdruck.

 var str1 = "Test_AA_234_6874_Test"; 
     var str2 = "Leaf_AA_234_6874_Test"; 

     str1 = Regex.Replace(str1, "^Test", ""); 
     str2 = Regex.Replace(str2, "^Leaf", ""); 

Regex.Replace Parameter sind Ihre Eingabestring (str1), das Muster, das Sie passen wollen, und was es mit, in diesem Fall ein Leerzeichen zu ersetzen. Das^-Zeichen bedeutet, dass man den Anfang der Zeichenkette betrachtet, also würde etwas wie "MyTest_AAAA_234_6874_Test" immer "MyTest_AA_234_6874_Test" zurückgeben.

1
string wordToRemoveFromBeginning = "Test_"; 
int index = st.IndexOf(wordToRemoveFromBeginning); 

string cleanPath = (index < 0) ? st : st.Remove(index, 
    wordToRemoveFromBeginning.Length); 
0

Ich bin gonna verwenden einige sehr einfache Code hier

string str = "Test_AA_234_6874_Test"; 
string substring = str.Substring(0, 4); 
if (substring == "Test" || substring == "Leaf") 
{ 
    str= str.Remove(0, 5); 
} 
Verwandte Themen