Как искать слово в строке, которая состоит из английского предложения?
Давайте возьмем пример английского предложения:
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);