确定一个句子是否包含特定单词

6

我想知道如何在标签中引用句子中的一个单词。例如,我有以下内容:

label1.text = "books pencil pen ruler";

我想表达的是:"如果label1.text中包含单词"pen",则执行某些操作"

if (label1.text CONTAINS THE WORD "pen")
{
    // do something
}

我该怎么做呢?


+1 只是因为似乎有很多关于如何解决这个问题的误解... - Eric J.
6个回答

13

使用正则表达式的单词边界:

if (Regex.IsMatch(label1.text, @"\bpen\b"))
    // do something
比起检查IndexOf或Splitting,正则表达式更加健壮。例如,简单的IndexOf("pen")会匹配到"open"这个词。如果尝试通过将其改为IndexOf(" pen ")来解决这个问题,则无法匹配"pen other words"这个短语。如果使用Split(' '),它将无法匹配"This sentence ends in pen."。而正则表达式的单词边界可以像你所期望的那样匹配所有这些情况。你可以根据更多的单词边界字符进行切割,但是让正则表达式类的编写者为您完成工作要比自己理解单词边界容易得多。

我同意IndexOf方法的答案是错误的 :-) 但它并不一定比按单词边界标记拆分更强大(虽然当然它是一个更短的解决方案,所以为此+1 :-)。 - Eric J.

2
你可以使用string.Split()将文本分离成单词,并使用Array.Contains检查字词是否在列表中。
string sentence = "books pencil pen ruler";
string[] words = sentence.Split(' ');
bool hasFox = words.Contains("pen");

如果您想允许除空格之外的更多分隔符(例如Tab),则使用Split时可以添加其他分隔符。如果您关心匹配的大小写敏感性,可以使用接受IEqualityComparer的Contains重载函数。

这个句子是什么意思:“我有一支笔,它的颜色是黑色。” - Adil
2
如答案中所提到的...如果你想要除了空格以外的更多单词分隔符,可以将它们添加到Split中,例如Split(' ','\t','.',',')...我点赞@Tim S.是因为他的答案更加简洁地解决了这个问题。 - Eric J.

0

尝试 -

if(label1.text.contains(" pen ")) 
     {
         //do something 
     }

只需在pen前后添加空格。

只需在“pen”前后添加空格即可。 - akhil
现在尝试匹配 "Bla bla bla pen"。其中不包含 "pen"。 - Eric J.

0

如果期望笔词在单词之间而不是字符串的开头或结尾。

if(label1.text.IndexOf(" pen ") != -1 )
{
//do something
}

编辑

经过讨论,我发现正则表达式可能是更好的选择。

if (Regex.IsMatch(label1.Text, @"\bpen\b"))
{
 //do something
}

这也符合 open :-) - Eric J.
没问题 :) 在这种情况下不会有“bla bla bla pen”,所以一切都好。谢谢 :) - Sindu_
如果输入文本是“Bla bla bla pen”,IndexOf(" pen ")如何找到“pen”?它会返回-1。 - Eric J.
在我的情况下,字符串中不会有相同的单词。所有单词都将是不同的。所以没问题。 - Sindu_
1
现在,经过最新的编辑,您再次错误地将 open|| label1.text.IndexOf("pen ") 匹配。 - Eric J.
显示剩余4条评论

0
string s1 = "books pencil pen ruler";
string s2 = "pen";
if(s1.Contains(s2) && s2 != "")
{
// do something
}

啊,我明白你想说什么了。嗯,我只是试图避免使用字符串数组。根据需求,选择使用什么还是由OP自己决定吧。 - pavanred

0

这应该会有所帮助

string data = label1.Text;
string word = "Pen";

if(!string.IsNullOrEmpty(data))
    if(data.Contains(word))
    {
         // do work here
    }

2
你有读过其他答案和评论吗?你的回答重复了几个已有的答案,并且由于相似的原因是错误的。 - Eric J.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接