0

特定の単語 ( matchword など) が外部ソースからの文に含まれていることを確認しようとしています。C# では現在、以下の正規表現パターンを使用して、これらの単語境界シナリオをカバーすることを計画しています (マッチワードは、可能なすべての文または単語分割文字で区切ることができる単一の単語である必要があります)。一致語は、文の最初/中間/最後にある場合もあれば、文字列と完全に一致する場合もあります。

多言語テキストをカバーし、大文字と小文字を区別しない必要があります。

([\s+,"'\(\[])matchword([\s+;\?\.;,"'\)\]])

例、

私のマッチワードが「テスト」であると仮定します(引用符なし)

例文は次のとおりです。

this is test, string -- 結果 - true

これはテスト中です -- 結果 - false

これは testest -- 結果 - false

テスト -- 結果 - true

4

2 に答える 2

1

あなたの場合、否定的なルックアラウンドで十分かもしれません:

(?<!\w)test(?!\w)

つまり、単語 test の前または後に \w 文字がないことを意味します。

C# で式の大文字と小文字を区別しないようにする場合RegexOptions.IgnoreCaseは、次の例のようにフラグを使用する必要があります。

Regex.IsMatch(subjectString, @"(?<!\w)test(?!\w)", RegexOptions.IgnoreCase)

ここでは、ルックアラウンドとは何かをよりよく説明しています。とにかく、上記の回答\bは、あなたの場合にははるかに優れています。正規表現をよりよく習得するために、この概念をより深く理解したいと思うかもしれません。その力は、先読みグループまたは後読みグループに含めるより複雑な式を選択する機能にあります。あなたの場合、それはただの無駄です。

于 2012-08-02T22:39:40.970 に答える
1

\bが単語の先頭と末尾を表す\btest\b場所を試してみるか、大文字と小文字を区別しないようにすることができます(?i)\btest\b

于 2012-08-02T22:43:18.107 に答える