0

現在、ターゲット単語+次の単語とターゲット単語+前の単語を見つけるための2つの個別の正規表現パターンがあります。

string text = "Here is a test MYWORD statement for MYWORD regex";
string pattern = "(\\bMYWORD\\s)(\\w+)"; //MYWORD statement; MYWORD regex
string pattern = "(\\w+)(\\s\\bMYWORD)"; //test MYWORD; for MYWORD

正規表現は、単一の呼び出しで使用するために上記の 2 つのパターンを組み合わせるエレガントな方法を提供しますか?

ありがとう

編集: 素晴らしい説明と例を提供してくれた m.buettner と Qtax に感謝します - 非常に便利です!

提供された例のいくつかを試してみましたが、これらは必要なコンテキストで「MYWORD」に一致しますが、おそらく十分に明確ではありませんでした.上記のコメントのすべてのフレーズを返そうとしています.

Matches(pattern) は、次のすべての文字列を返す必要があります。

'MYWORD statement'
'MYWORD regex'
'test MYWORD'
'for MYWORD'

私の元の質問がそれを十分に説明していない場合はお詫びします!

4

3 に答える 3

0

あなたの例では、これがうまくいくような簡単なもの:

(\w+)\sMYWORD\s(\w+)

しかし、それには の両側に単語が必要ですMYWORD

一部の単語がない場合は、次のようにオプションにすることができます。

(?:(\w+)\s)?\bMYWORD\b(?:\s(\w+))?

MYWORDしかし、それは単語のないa に一致します。

MYWORDa をその前後に少なくとも 1 つの単語と一致させたい場合は、次のように使用できます。

(?:(\w+)\sMYWORD\b(?:\s(\w+))?|\bMYWORD\s(\w+))

ここでも、右側の単語はグループ 2 または 3 のいずれかに属します。

于 2013-07-07T10:58:07.950 に答える