正则表达式找到确切的单词/句子匹配

时间:2017-01-11 15:25:45

标签: c# regex

我有"impportent words"的linq列表,其中包含句子和单个单词。

我需要查找在"sentence_to_search_for_importent_word"

中是否有来自importent_words的任何单词或句子

最后结果应该以数组或其他东西结束。

这是我所做的事情直到知道..

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"

似乎问题是“这是”不止一个词。

2 个答案:

答案 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();