让我们举一个英语句子的例子:
string sentence = "Hello, How are you?";
因此,如果我想搜索一个单词"你",我会使用:
if (sentence.Contains("you")); // This would be true
但如果我搜索一下:
if (sentence.Contains("ello")); // This would also be true
但我希望它是假的。我想搜索整个单词。不是单词的一部分
如何在C#中执行此操作?
答案 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