Ответ 1
Вы должны добавить разделитель слов к вашему регулярному выражению:
\b(shoes|shirt|pants)\b
В коде:
Regex.Match(content, @"\b(shoes|shirt|pants)\b");
В C#
, я хочу использовать регулярное выражение для соответствия любому из этих слов:
string keywords = "(shoes|shirt|pants)";
Я хочу найти целые слова в строке содержимого. Я думал, что это regex
сделает это:
if (Regex.Match(content, keywords + "\\s+",
RegexOptions.Singleline | RegexOptions.IgnoreCase).Success)
{
//matched
}
но он возвращает true для таких слов, как participants
, хотя мне нужно всего лишь слово pants
.
Как мне сопоставлять только эти буквальные слова?
Вы должны добавить разделитель слов к вашему регулярному выражению:
\b(shoes|shirt|pants)\b
В коде:
Regex.Match(content, @"\b(shoes|shirt|pants)\b");
Try
Regex.Match(content, @"\b" + keywords + @"\b", RegexOptions.Singleline | RegexOptions.IgnoreCase)
\b
соответствует границам слов. Подробнее см. здесь.
Вам нужно утверждение с нулевой шириной с обеих сторон, что символы до или после слова не являются частью слова:
(?=(\W|^))(shoes|shirt|pants)(?!(\W|$))
Как и другие, я думаю, что \b будет работать вместо (? = (\ W | ^)) и (?! (\ W | $)), даже если слово находится в начале или конце строки ввода, но я не уверен.
поместите на него границу слова, используя метабактерию\b.