13

如何在字符串中搜索完全匹配?例如,如果我有一个包含此文本的字符串:

标签
标签:
标签

我搜索标签,我只想得到第一个匹配,而不是其他两个。我尝试了 Contains 和 IndexOf 方法,但它们也给了我第二个和第三个匹配项。

4

4 回答 4

26

您可以使用这样的正则表达式:

bool contains = Regex.IsMatch("Hello1 Hello2", @"(^|\s)Hello(\s|$)"); // yields false
bool contains = Regex.IsMatch("Hello1 Hello", @"(^|\s)Hello(\s|$)"); // yields true

\b 是一个单词边界检查,像上面一样使用它只能匹配整个单词。

认为正则表达式版本应该比 Linq 更快。

参考

于 2010-11-09T07:50:32.420 回答
3

您可以尝试拆分字符串(在这种情况下,正确的分隔符可以是空格,但取决于具体情况),然后您可以使用 equals 方法查看是否存在匹配项,例如:

private Boolean findString(String baseString,String strinfToFind, String separator)
{                
    foreach (String str in baseString.Split(separator.ToCharArray()))
    {
        if(str.Equals(strinfToFind))
        {
            return true;
        }
    }
    return false;
}

并且使用可以

findString("Label label Labels:", "label", " ");
于 2010-11-09T08:39:46.920 回答
1

您可以尝试使用 LINQ 版本:

string str = "Hello1 Hello Hello2";
string another = "Hello";
string retVal = str.Split(" \n\r".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
                   .First( p => p .Equals(another));
于 2010-11-09T08:08:23.833 回答
1

看来您在单词之间有一个分隔符 (crlf),因此您可以将分隔符包含在搜索字符串中。

如果没有,那么我会接受 Liviu 的建议。

于 2010-11-09T10:06:31.277 回答