Содержит метод возвращает неправильное значение - PullRequest
0 голосов
/ 01 марта 2019

Я использую Contains(), чтобы проверить, есть ли в строке слово, и метод возвращает значение true, но я не сравниваю слово.

Текст:

«Под видом Medicare for All и« Зеленого нового курса »демократы придерживаются тех же самых утомленных экономических теорий, которые обнищали нации и душили свободы миллионов за прошедшее столетие», - сказал Пенс под аплодисменты.«Эта система - социализм.

« И единственное, что зеленый в так называемом Зеленом Новом Курсе, - это то, сколько зеленых будет стоить налогоплательщикам, если мы сделаем это: 90 миллионов долларов », - сказал он.Демократы говорят, что цена будет ниже, чем указанная Пенсом цифра.

Его комментарии к Консервативной конференции по политическим действиям за пределами Вашингтона продолжили толчок Белого дома и Республиканского национального комитета, чтобы раскрасить оппозиционную партию как адское желание заставить Америкуэкономика, которая централизованно планируется из Вашингтона и намеревается вытащить деньги из карманов американцев для финансирования множества социальных программ. "

Поиск слова:" нация "

Знаете ли выдругой способ сделать этот поиск?

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

У Regex есть свои проблемы, так как вам нужно очень глубоко понять, как работает его механика, и велика вероятность возникновения аварий или ночных кошмаров.Обычно я разбиваю текст на маленькие кусочки и работаю с ними.

Не стесняйтесь добавлять вещи в метод Split ()!Наслаждайтесь:

static bool findWord()
{
 var text = @"“Under the guise of Medicare for All and a Green New Deal, Democrats are embracing the same tired economic theories that have impoverished nations and stifled the liberties of millions over the past century,” Pence said to applause. “That system is socialism.

“And the only thing green about the so-called Green New Deal is how much green it’s going to cost taxpayers if we do it: $90 million,” he said. Democrats have said the price tag would be lower than the figure Pence quoted.

His comments to the Conservative Political Action Conference outside Washington continued a White House and Republican National Committee push to paint the opposition party as hellbent on making America’s economy one that is centrally planned from Washington and intent on taking money out of Americans’ pockets to finance a myriad social programs.";

var stringList = text.Split(' ', ',', ':', '.', '?', '“', '-'); // split the text into pieces and make a list
foreach (var word in stringList) // go through all items of that list
{
  if (word == "nation") return true;       
}
return false;
}
0 голосов
/ 01 марта 2019

Ваш поиск возвращает true, потому что текст содержит «нации», включая строку «нация».

Если вы хотите найти слово «нация» иНе включайте подобные слова, такие как «нации», возможно, самый простой способ - использовать регулярное выражение и метасимвол \b, который соответствует границам слов.

bool found = Regex.IsMatch(text, @"\bnation\b");

Если вы хотите обобщить это, вы можете написать:

string search = "nation";
bool found = Regex.IsMatch(text, $@"\b{Regex.Escape(search)}\b");

Как подсказывает @ Flydog57 в комментариях, вы также можете выполнять поиск без учета регистра, если вы ищете:

string search = "nation";
bool found = Regex.IsMatch(text, $@"\b{Regex.Escape(search)}\b", RegexOptions.IgnoreCase);
...