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));