web-dev-qa-db-ja.com

正規表現:単語全体を照合

C#、これらの単語のいずれかに一致する正規表現を使用したい:

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

コンテンツ文字列内の単語全体を検索したい。私はこのregexがそれをするだろうと思った:

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

しかし、単語participantsのみが必要な場合でも、pantsなどの単語に対してtrueを返します。

これらの文字通りの単語だけを一致させるにはどうすればよいですか?

47
Kris B

正規表現にWord区切り文字を追加する必要があります。

\b(shoes|shirt|pants)\b

コード内:

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

試して

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

\bはワード境界で一致します。詳細については here を参照してください。

13
Ben Lings

Wordの前または後の文字がWordの一部ではないという両側のゼロ幅アサーションが必要です。

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

他の人が示唆したように、Ithink\ b(?=(\ W | ^) )(?!(\ W | $))は、Wordが入力文字列の先頭または末尾にある場合でも、わかりません。

5
richardtallent

\ bメタシーケンスを使用して、Word境界を配置します。

1
t3rse