如何搜索包含英文句子的字符串中的单词?

时间:2016-03-13 09:57:26

标签: c# regex string word

让我们举一个英语句子的例子:

string sentence = "Hello, How are you?";

因此,如果我想搜索一个单词"你",我会使用:

if (sentence.Contains("you")); // This would be true

但如果我搜索一下:

if (sentence.Contains("ello")); // This would also be true

但我希望它是假的。我想搜索整个单词。不是单词的一部分

如何在C#中执行此操作?

3 个答案:

答案 0 :(得分:5)

您可以使用正则表达式执行此操作。

var search = "ello";

string sentence = "Hello, How are you?";

string pattern = string.Format(@"\b{0}\b", search);

if(Regex.IsMatch(sentence, pattern))
{
}

答案 1 :(得分:1)

您可以使用Regex.Split()按字边界拆分句子,并使用简单Enumerable.Contains搜索该字词。当你必须在一个句子中搜索多个单词时,它可能会很有用(稍后将它们放入某些HashSet中以获得更好的查找效果):

var line = "Hello, How are you ? ";
var pattern = @"\b";

var words = new HashSet<String>(Regex.Split(line, pattern));

Console.WriteLine(words.Contains("Hello"));
Console.WriteLine(words.Contains("ello"));
Console.WriteLine(words.Contains("How"));

或者如果您想偶尔搜索一个单词,可以直接通过regex escaping搜索该单词并将其与@"\b"结合使用:

var line = "Hello, How are you ? ";
var wordBad = "ello";
var wordGood = "Hello";                    

Console.WriteLine(Regex.Match(line, $"\\b{Regex.Escape(wordBad)}\\b").Success);
Console.WriteLine(Regex.Match(line, $"\\b{Regex.Escape(wordGood)}\\b").Success);

答案 2 :(得分:1)

您可以使用String.Split(结合使用选择删除标点符号)从句子中获取单词列表,然后在该列表中使用Enumerable.Contains

var res = sentence.Split().Select(str => String.Join("", str.Where(c => Char.IsLetterOrDigit(c))))
                  .Contains("ello");

Console.WriteLine(res); //  False