我正在使用Contains()
来检查字符串中是否包含单词,并且该方法返回的是true,但我没有要比较的单词。
文字:
彭斯在掌声中称:“在全民医疗保险和绿色新政的幌子下,民主党人正在接受同样贫穷的经济理论,这些理论使各国陷入贫困,扼杀了上个世纪的数百万人的自由。” “那个系统是社会主义。“所谓的绿色新政,唯一的绿色就是如果我们这样做,将使纳税人付出多少绿色成本:9000万美元,”他说。民主党人表示,价格标签将低于彭斯引用的数字。
他在华盛顿郊外的保守党政治行动会议上的讲话继续了白宫和共和党全国委员会的努力,将反对党描绘成使美国经济成为华盛顿中央计划的,意图从美国人的口袋里掏钱的顽疾。为无数的社会项目提供资金。”
搜索词:“国家”
您知道另一种搜索方法吗?
答案 0 :(得分:5)
您的搜索返回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);
答案 1 :(得分:0)
正则表达式有其问题,因为您需要非常深入地了解其机制是如何工作的,发生事故或性能噩梦的可能性很大。 我通常要做的是将文本分解成小块,然后使用它们。
随时向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;
}