Как искать слово в строке, которая состоит из английского предложения?

Давайте возьмем пример английского предложения:

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 ответа

Решение

Вы можете сделать это с помощью регулярных выражений.

var search = "ello";

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

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

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

Ты можешь использовать String.Split (в сочетании с Выбрать, чтобы удалить пунктуацию), чтобы получить список слов из предложения, а затем использовать Enumerable.Contains в этом списке:

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

Console.WriteLine(res); //  False

Вы можете разбить предложение с помощью 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"));

Или, если вы хотите искать одно слово время от времени, вы можете искать напрямую, используя регулярное выражение, избегая слова и комбинируя его с @"\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);
Другие вопросы по тегам