C# найти точное совпадение в строке

Как я могу найти точное совпадение в строке? Например, если бы у меня была строка с этим текстом:

метка
этикетка:
метки

и я ищу ярлык, Я хочу получить только первое совпадение, а не два других. Я попробовал метод Contains и IndexOf, но они также дают мне 2-е и 3-е совпадения.

4 ответов


вы можете использовать регулярное выражение вроде этого:

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

\b является проверкой границы слова, и используется, как выше, он сможет соответствовать только целым словам.

Я думаю версия regex должна быть быстрее, чем Linq.

ссылка


вы можете попытаться разделить строку (в этом случае правильным разделителем может быть пробел, но это зависит от случая), и после того, как вы можете использовать метод 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", " ");

кажется, у вас есть разделитель (crlf) между словами, чтобы вы могли включить разделитель как часть строки поиска.

Если нет, то я бы пошел с предложением Ливиу.


вы можете попробовать версию LINQ:

string str = "Hello1 Hello Hello2";
string another = "Hello";
string retVal = str.Split(" \n\r".ToCharArray(), StringSplitOptions.RemoveEmptyEntries)
                   .First( p => p .Equals(another));