Regex.Match целые слова - PullRequest
       26

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

46 голосов
/ 31 июля 2009

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

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

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

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

но он возвращает истину для слов типа participants, хотя мне нужно только целое слово pants

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

Ответы [ 4 ]

83 голосов
/ 31 июля 2009

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

\b(shoes|shirt|pants)\b

В коде:

Regex.Match(content, @"\b(shoes|shirt|pants)\b");
13 голосов
/ 31 июля 2009

Попробуйте

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

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

5 голосов
/ 31 июля 2009

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

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

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

1 голос
/ 31 июля 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...