C # найти точное совпадение в строке - PullRequest
11 голосов
/ 09 ноября 2010

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

label
label:
tags

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

Ответы [ 4 ]

22 голосов
/ 09 ноября 2010

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

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

\ b - это проверка границы слова, и, как указано выше, она будет соответствовать только целым словам.Я думаю версия регулярного выражения должна быть быстрее, чем Linq.

Ссылка

3 голосов
/ 09 ноября 2010

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

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

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

1 голос
/ 09 ноября 2010

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

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