Подтвердить что ты не робот

Regex.Match целые слова

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

string keywords = "(shoes|shirt|pants)";

Я хочу найти целые слова в строке содержимого. Я думал, что это regex сделает это:

if (Regex.Match(content, keywords + "\\s+", 
  RegexOptions.Singleline | RegexOptions.IgnoreCase).Success)
{
    //matched
}

но он возвращает true для таких слов, как participants, хотя мне нужно всего лишь слово pants.

Как мне сопоставлять только эти буквальные слова?

4b9b3361

Ответ 1

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

\b(shoes|shirt|pants)\b

В коде:

Regex.Match(content, @"\b(shoes|shirt|pants)\b");

Ответ 2

Try

Regex.Match(content, @"\b" + keywords + @"\b", RegexOptions.Singleline | RegexOptions.IgnoreCase)

\b соответствует границам слов. Подробнее см. здесь.

Ответ 3

Вам нужно утверждение с нулевой шириной с обеих сторон, что символы до или после слова не являются частью слова:

(?=(\W|^))(shoes|shirt|pants)(?!(\W|$))

Как и другие, я думаю, что \b будет работать вместо (? = (\ W | ^)) и (?! (\ W | $)), даже если слово находится в начале или конце строки ввода, но я не уверен.

Ответ 4

поместите на него границу слова, используя метабактерию\b.