web-dev-qa-db-ja.com

C#は文字列で完全一致を検索します

文字列内で完全に一致するものを検索するにはどうすればよいですか?たとえば、このテキストを含む文字列がある場合:

label
ラベル:
ラベル

そして、ラベルを検索します。最初の一致のみを取得し、他の2つは取得したくありません。 containsメソッドとIndexOfメソッドを試しましたが、2番目と3番目の一致も得られます。

11
david

次のような正規表現を使用できます。

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

\ bは単語の境界チェックであり、上記のように使用すると、単語全体にのみ一致することができます。

think正規表現バージョンはLinqよりも高速である必要があります。

参照

23
Liviu M.

文字列を分割してみて(この場合、右の区切り文字はスペースにすることができますが、場合によって異なります)、equalsメソッドを使用して、一致するものがあるかどうかを確認できます。例:

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;
}

そして、使用することができます

findString("Label label Labels:", "label", " ");
3
g.geloso

単語間に区切り文字(crlf)があるようです。そのため、検索文字列の一部として区切り文字を含めることができます。

そうでなければ、私はLiviuの提案に行きます。

1
Shiv Kumar

LINQバージョンを試すことができます:

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