2012-04-27 4 views
2

私はそのような表現を持っています。コレクションの正規表現のフィルタリングの問題

a+1, a#1, a-1, a.1, a 1, ab 

が、どの要素が捨てられていない:私だけの要素が滞在するには、以下の欲しい、後

a+1, a#1, a-1, a.1, a 1, ab, a'1, [email protected], a*1, a&1, a:1, a!1 

collection = collection.Where(x => Regex.IsMatch(x, "[a-zA-Z0-9+#-\\.\\s]+", RegexOptions.IgnoreCase)).ToList(); 

は、フィルタリングの前に、コレクションには、そのような要素を持っています。

文字、数字、プラス、ハッシュ、マイナス、ドット、空白で構成される要素だけを保持する必要があります。

この正規表現を修正するにはどうすればよいですか?

答えて

3

あなたの正規表現に、テキストに一致する部分文字列が含まれているかどうかを確認します。すべての要素にはa(正規表現に一致)が含まれているため、すべての要素が保持されます。

... Regex.IsMatch(x, "^[a-zA-Z0-9+#-\\.\\s]+$", ... 

EDIT:あなたは一致する部分文字列が正確に、(最初とテキストの終わりをマークする)^...$であなたの正規表現を囲みたい場合は

加えて、以下を行う必要がありグループの最後にダッシュ-を移動:

... Regex.IsMatch(x, "^[a-zA-Z0-9+#\\.\\s-]+$", ... 

そうでない場合は、012から#-\\.試合のすべての文字を〜.

+0

ありがとうございますが、何らかの理由で3つの不要な要素があります:a'1、a * 1、&1はまだ問題があります。これはナンセンスです。 – jwaliszko

+0

@JarekWaliszko:そうです、あなたの正規表現には別のバグがありました。私は答えによって編集しました。 – Heinzi

+1

ありがとう、良いヒント、btw:ハードコアの心のパズルが本当に好きな人のための正規表現です]; – jwaliszko