2017-03-22 15 views
1

文中の完全な単語にマッチするC#正規表現を探しています。文中の単語を一致させるための正規表現

私の文章とパターンは以下のようになります。

string mySentence = "There is no gain in this world without pain"; 

string mypattern = string.Format(@"(?:(?<=^|\s)(?=\S)|(?<=\S|^)(?=\s)){0} (?:(?<=\S)(?=\s|$)|(?<=\s)(?=\S|$))", "pain"); 

MatchCollection matches = Regex.Matches(mySentence, mypattern); 

上記のパターンを使用しても一致しません。

しかし、私はこのパターンを使用する場合、私は一致を取得します。

string mypattern = string.Format(@"\b{0}\b", "patient"); 

しかし、問題は、それはハイフンで、痛みだけでなく、私は完全に言葉を探していたとおりであるように単語を区切りと一致しています。

すべてのヘルプ感謝、感謝

+1

実際の要件は何ですか?空白で囲まれた検索フレーズに一致しますか?あるいは、単語の境界内にあるが、前後に '--'が続くときはない。 –

+0

@WiktorStribiżew改行や空白の後に続くことができる単語にマッチさせることを考えています。 thanks – Sandepku

+0

私は長い文字列のテキストの空白以外の塊を検索する必要がある場合にのみ、非正規表現と一緒に両方のソリューションを提供しました。 –

答えて

2

シナリオ#1(ワード(S)ハイフンで続い/先行していない)

使用負の前後参照(?<!-)(検索語句の前に無-)と(?!-) (なし-検索語句の後に)一緒に\bと:

var mypattern = string.Format(@"(?<!-)\b{0}\b(?!-)", Regex.Escape(search)); 

シナリオ#2(空白で囲まれた単語(複数可))

Iはその後や改行や空白が先行することができる単語を一致させるために探しています。

あなたはこのように前後参照を使用する必要があります((?<=\s|^)に等しい)

var mypattern = string.Format(@"(?<!\S){0}(?!\S)", Regex.Escape(search)); 

(?<!\S)前後参照、検索ワードの前に空白や文字列の先頭を必要とします。 (?!\S)否定ルックアヘッドには、検索語の後に空白記号が必要です。

Regex.Escapeは、検索ワード内のすべての特殊文字がリテラル文字として扱われるように注意するためのステップです。

注:「単語」に空白が含まれていない場合は、正規表現は必要ありません。使用

var search = "this"; 
var sentence = "There is no gain in this world without pain"; 
var isPresent = sentence.Split().Contains(search); 
Console.Write(isPresent); // = > True 
+0

私はこの声明を試してみました。しかし、一致するものは見つからなかったので、それに続く期間や特殊文字があるかもしれないことを忘れてしまったと思います。 – Sandepku

+1

var mypattern = string.Format(@ "(?<! - )\ b {0} \ b(?! - ) "、Regex.Escape(search));'? –

+1

私はシナリオ#1のこの正規表現が私のために働くと思う:) - ありがとう – Sandepku

関連する問題