我有"impportent words"
的linq列表,其中包含句子和单个单词。
我需要查找在"sentence_to_search_for_importent_word"
最后结果应该以数组或其他东西结束。
这是我所做的事情直到知道..
List<string> importent_words = new List<string>() {"age", "what is", ".", "pages"}
string sentence_to_search_for_importent_words = "what is your age.";
我需要在句子中找到importent_words
并将所有匹配输出到列表
我试试这个,但它并没有真正完成这项工作
var pattern = new Regex(@"\w+");
var qa = pattern.Split(first_sentence.ToLower()).Where(w => importent_words.Contains(w));
它必须返回“年龄”而不是“年龄”它也应该找到“什么是”不仅“什么”
使用\w
似乎找到了年龄,但它只输出"this"
而不是"this is"
似乎问题是“这是”不止一个词。
答案 0 :(得分:4)
如果您要查找的只是您的句子中出现的重要单词,那么您可以使用
importent_words.Where(x => sentence.Contains(x))
如果这需要不区分大小写,那么您可以从Case insensitive 'Contains(string)'的答案中找到Contains(x)
的替代品(或使用当前正则表达式尝试中显示的sentence.ToLower()
)< / p>
答案 1 :(得分:0)
万一你想要一个可扩展的正则表达式解决方案。需要为正则表达式模式转义匹配项。您可以使用Regex.Escape()来实现此目的。
List<string> importent_words = new List<string>() { "age", "what is", @"\.", "ages", "bob" };
string sentence_to_search_for_importent_words = "what is your age. Frank";
string regexString = string.Join("|" , importent_words.ToArray());
Regex wordRegex = new Regex(regexString);
string[] result = wordRegex.Matches(sentence_to_search_for_importent_words)
.Cast<Match>()
.Select(m => m.Value)
.ToArray();