2012-03-13 31 views
0

であるかどうかを確認するには、2つのパラメータを受け入れる関数があります。 パラメータ1:SEARCHTERM、 パラメータ2:商品名文中に一致する単語がC#の正規表現

どのように私は検索語の単語は、商品名に存在するかどうかをチェックしますか、それがミドルや商品名の最後に、最初に発生した問題ではありませんか?

SearchTerm = "cano"、ProductName = "canon"と言いますと、一致する単語で一致する必要があります。一致しない場合はfalseを返します。

答えて

4

word boundaries\bのような完全な単語のみを検索したい場合は、検索語の前後に追加してください。

\bは、ワードからワード以外の文字へ、または非ワードからワード文字への変更に一致するゼロ幅アサーションです。

String term = "Foo"; 
String[] text = { "This contains Foo bar.", "Foo.", "Foobar", "BarFoo", "foo" }; 

Regex reg = new Regex(@"\b" + Regex.Escape(term) + @"\b"); 

foreach (var item in text) { 
    Match word = reg.Match(item); 
    if (word.Success) { 
     Console.WriteLine(item + ": valid"); 
    } 
    else { 
     Console.WriteLine(item + ": invalid"); 
    } 
} 

出力:

これはFooのバーが含まれています。 =>有効
Foo。 =>有効な
foobarに=>無効
BarFoo =>無効
FOO =>無効

-1

単純な文字列検索のための正規表現は必要ありません。

ProductName.Contains(searchTerm); 

http://msdn.microsoft.com/en-us/library/dy85x1sa.aspx

+2

しかし、彼は「カノン」はその文のとき文で発見され、「できる」のようなものを避けたいです。 ".Contains"はこれを避けません。 –

+0

私は答えた後、質問が更新されました。 :) – hungryMind

1

あなたはそれが別々の単語ではなく、サブ単語だことを指定できるようにしたいので、あなたはregexesを使用する必要があります。

あなたが探している単語は「笑」変数に格納されている場合、あなたの正規表現は、おそらく、このようになります。

:基本的に

Regex regex1 = new Regex(lol + @"[^a-Z]"); // include grammar marks to avoid issues like "can." not matching 

、あなただけのその言葉を一致させよう、としたいですその後に別の手紙ではない文字があることを確かめてください。そうすれば、別の言葉ではないことが分かります。

を編集してください。代わりにこの美しさを試してください。自分で何かを学んだ。

string sPattern = @"\b" + lol + @"\b"; 

Here's some example usage.

EDIT2:stemaが最初にそれを得たように見えます。 Here's the page I used, for reference.

+2

解決策にはいくつかの問題があります。最初に "Z"が "a"の前に来るので、 "逆順の範囲"例外がスローされます。 "Z"と "a"の間に6つの非文字文字ASCIIテーブルに格納されます。次の問題は、検索語の後に文字列の終わりがあり、最後に文字列の終わりがある場合は失敗します。テキストの中に用語の前に何かがあるとどうなりますか? – stema

+0

優れた点私は明らかに自分の利益のために少し遅れている。私が乾草を打つ前にそれを修正できるかどうか見てみましょう。 –

+1

+1あなたの答えを改善するために(今は正しい) – stema

関連する問題