1

文字列にキーワードのいずれかがリストに含まれているかどうかを確認し、見つかった場合は見つかったキーワードを返す方法があるかどうか疑問に思っていました。

たとえば、のリストがありkeywordsます。

List<string> keywords = new List<string>{"word1", "word2", "word3"};

そして、sentenceキーワードに対してチェックしたい(文字列)があります:

string sentence = "something something something word2 something something";

を検索して、見つかったものを返す方法はありkeywordsますsentenceか? たとえば、 を返しword2ます。

おそらくforloopを使用してキーワードをループできることはわかっていますが、実際のプログラムには少なくとも20個のキーワードがあるため、コードが少し面倒になるため、そうしたくありません。

私の元のアイデアは次のようなものです。

string SearchKeywords(List<string> keywords, string sentence){
    foreach (string word in keywords){
        if (sentence.Contains(word)) return word;
    }
    return ""; //return blank string if no match found
}

仕事をするために使用できる組み込み関数があるかどうか疑問に思っています。ありがとう!

4

3 に答える 3

3

正規表現を使用すると、キーワードを使用して代替を作成し、のパターンを取得できますword1|word2|word3Regex.Escape正規表現のメタ文字との競合を避けるために、エスケープする必要があります。大文字と小文字を区別しないようにするには、RegexOptions.IgnoreCaseオプションを追加します。

string pattern = String.Join("|", keywords.Select(k => Regex.Escape(k)));
Match m = Regex.Match(sentence, pattern, RegexOptions.IgnoreCase);

if (m.Success)
{
    Console.WriteLine("Keyword found: {0}", m.Value);
}
else
{
    Console.WriteLine("No keywords found!");
}

気が変わって複数の一致を見つけたい場合は、Regex.Matches代わりに使用して、その結果をループします。

于 2013-11-12T15:17:18.540 に答える