簡體   English   中英

如何檢查我的列表中是否有任何單詞 <string> 包含文字

[英]How to check if any word in my List<string> contains in text

我有一個

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

如果我的字符串包含任何這些單詞,我想檢查使用linq; Smthng喜歡:

var q = myText.ContainsAny(words);

第二,如果我也有一個句子列表:

List<string> sentences = new List<string> { "sentence1 word1" , "sentence2 word2" , "sentence3 word3"};

並且還要檢查這些句子中是否包含任何這些單詞!

 var q = sentences.Where(s=>words.Any(s.text))....

如果只需要檢查子字符串,則可以使用簡單的LINQ查詢:

var q = words.Any(w => myText.Contains(w));
// returns true if myText == "This password1 is weak";

如果要檢查整個單詞,可以使用正則表達式:

  1. 匹配正則表達式,這是所有單詞的分離:

     // you may need to call ToArray if you're not on .NET 4 var escapedWords = words.Select(w => @"\\b" + Regex.Escape(w) + @"\\b"); // the following line builds a regex similar to: (word1)|(word2)|(word3) var pattern = new Regex("(" + string.Join(")|(", escapedWords) + ")"); var q = pattern.IsMatch(myText); 
  2. 將字符串拆分為帶有正則表達式的單詞,並測試單詞集合的成員資格(如果將make單詞用於HashSet而不是List則會更快):

     var pattern = new Regex(@"\\W"); var q = pattern.Split(myText).Any(w => words.Contains(w)); 

為了根據這個標准過濾句子集合,你所要做的就是把它放到一個函數中並調用Where

 // Given:
 // bool HasThoseWords(string sentence) { blah }
 var q = sentences.Where(HasThoseWords);

或者把它放在lambda中:

 var q = sentences.Where(s => Regex.Split(myText, @"\W").Any(w => words.Contains(w)));
var q = words.Any(w => myText.Contains(w));

要返回包含一個或多個單詞的所有句子:

var t = sentences.Where(s => words.Any(w => s.Contains(w)));

            foreach (var sentence in t)
            {
                Console.WriteLine(sentence);
            }

為你的第一個條件

List<string> words = new List<string> { "word1", "word2", "word3" };
string test = "word1";
bool isFound = words.Contains(test);

為你的第二個條件

bool isFound = sentences.Any(x => x.Split(new char[] { ' ' }).Contains(test));

作為一個無關的旁注

在獲得一些答案之后,您正在更改問題的范圍,這不是提問的好方法。 :)

雖然所提供的大多數解決方案都是可用的(所有調用Contains ,它將為您提供所需的解決方案),但如果列表和文本很大,則可能存在性能問題。

從陳述的問題來看,我認為你在空格或任何其他除數之間任意一個字。 所以,我建議你將myText分成一個單詞列表,並將它們中的每一個與你的單詞列表進行比較,現在使用contains。

當然,這種方式更復雜; 您必須確保正確分割單詞 - 但是使用較大的字符串(例如,文本文件)可能會有一些性能提升。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM