2010-11-09 13 views
9

Wie kann ich nach einer genauen Übereinstimmung in einer Zeichenfolge suchen? Zum Beispiel hatte Wenn ich einen String mit diesem Text:C# exakte Übereinstimmung in Zeichenfolge finden

Label
Label:
Etiketten

Und ich für das Label zu suchen, ich will nur das erste Spiel bekommen, nicht die beiden anderen. Ich habe die Contains und IndexOf Methode ausprobiert, aber sie geben mir auch die 2. und 3. Matches.

+0

warum überprüfen Sie nicht nur 'str ==" label "'? –

+1

er sucht nach "ganzen Wort" Suche .. :) –

+1

@Shadow Wizard: oh, ok. –

Antwort

18

Sie können einen regulären Ausdruck wie folgt verwenden:

bool contains = Regex.IsMatch("Hello1 Hello2", @"(^|\s)Hello(\s|$)"); // yields false 
bool contains = Regex.IsMatch("Hello1 Hello", @"(^|\s)Hello(\s|$)"); // yields true 

Das \ b ist eine Wortgrenze zu überprüfen, und verwendet wie oben nur ganze Wörter übereinstimmen können.

I denken die Regex-Version sollte schneller sein als Linq.

Reference

+0

Aus irgendeinem Grund hat dies nicht funktioniert. Es ergab sich immer wahr, egal was ich schrieb. – david

+0

Sie müssen etwas falsch gemacht haben, weil ich es überprüft habe und es funktioniert perfekt. Vielleicht könnten Sie den Code posten, von dem Sie sagen, dass er immer wahr zurückgibt. –

+0

Ok, also scheinbar string reg = (@ "\ hHello \ b"); funktioniert aber string reg = (@ "\ b" + label + @ "\ b"); nicht. Warum ist das und wie kann ich es beheben? – david

1

Sie könnten eine LINQ-Version versuchen:

string str = "Hello1 Hello Hello2"; 
string another = "Hello"; 
string retVal = str.Split(" \n\r".ToCharArray(), StringSplitOptions.RemoveEmptyEntries) 
        .First(p => p .Equals(another)); 
+0

Das scheint zu funktionieren, danke. – david

3

Sie können versuchen, die Zeichenfolge zu teilen (in diesem Fall die richtigen Trennzeichen der Raum sein können, aber es hängt von dem Fall ist) und nach Sie können die Methode equals zu sehen verwenden, wenn das Spiel zum Beispiel ist:

private Boolean findString(String baseString,String strinfToFind, String separator) 
{     
    foreach (String str in baseString.Split(separator.ToCharArray())) 
    { 
     if(str.Equals(strinfToFind)) 
     { 
      return true; 
     } 
    } 
    return false; 
} 

Und die Verwendung kann

sein
findString("Label label Labels:", "label", " "); 
1

Es scheint, dass Sie ein Trennzeichen (crlf) zwischen den Wörtern haben, so dass Sie das Trennzeichen als Teil der Suchzeichenfolge einschließen könnten.

Wenn nicht, dann würde ich mit Livius Vorschlag gehen.

Verwandte Themen