简体   繁体   中英

Regex.Match whole words

In C# , I want to use a regular expression to match any of these words:

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

I want to find the whole words in the content string. I thought this regex would do that:

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

but it returns true for words like participants , even though I only want the whole word pants .

How do I match only those literal words?

You should add the word delimiter to your regex:

\b(shoes|shirt|pants)\b

In code:

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

Try

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

\\b matches on word boundaries. See here for more details.

You need a zero-width assertion on either side that the characters before or after the word are not part of the word:

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

As others suggested, I think \\b will work instead of (?=(\\W|^)) and (?!(\\W|$)) even when the word is at the beginning or end of the input string, but I'm not sure.

使用 \\b 元序列在其上放置单词边界。

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM