2011-01-24 6 views
0

私はマスクを持っている: "×" AZまたはAZまたは0-9正規表現C#(XXXX-XXXXマスク)

することができ XXXX-XXXX-XXXX

とコードがあります。

  string[] numbers = 
       { 
        "1a3F-5t5C-FIG0-InFo", 
        "444-234-2245", 
        "444.-2344-2245", 
       }; 
     string sPattern = "^[a-z0-9A-z]{4}-[a-z0-9A-z]{4}-[a-z0-9A-z]{4}$-[a-z0-9A-z]{4}$"; 
     var validList = new List<string>(); 

     foreach (string s in numbers) 
     { 
      if (Regex.IsMatch(s, sPattern)) 
      { 
       validList.Add(s); 
      } 
     } 
     Assert.IsTrue(validList.Count==1); 

しかし、それは動作しませんが...私は式のいくつかのミスを持っています。なぜそれが間違っているのか説明できますか?

答えて

6

"a-z0-9A-z"は "a-z0-9A-Z"(大文字のZに注意してください)でなければならず、式の途中に$そこにはいけません。あなたのマスクが現在と4個の xxxxのセットを合わせようとしているようです。

これらの3つの問題を修正して、問題が解決しない場合は質問を更新してください。

個人的に私はところで、パターンのためRegexのインスタンスを作成します。

Regex regex = new Regex(
    "^[a-z0-9A-Z]{4}-[a-z0-9A-Z]{4}-[a-z0-9A-Z]{4}$"); 
+0

はどんな恩恵を与えるインスタンスを作成していますか? – Dyppl

+0

@Stook:パフォーマンスの意味合いはどちらかというと分かりませんが、コードがより明確になります* IMO、それは少なくとも重要である可能性があります:) –

+0

私は小さなツールを使用しました)をBrian Delahuntyから入手し、正規表現からプリコンパイルされたDLLを作成しました。 –

0

を使用すると、複数のサブセクション((?<str>[^-]+)-?)+と素晴らしい行くその名前のグループ化(?<name>.*)を使用してに見てみたいことがあります。

http://txt2re.com/も役立ちます。

(注:ない答え、単にいくつかの(たぶん)参考になっ追加情報)あなたが複数の文字列をチェックする必要がない場合

+0

これは "aaaa-aaaa例えば、-aaaa-aaaa-aaaa-、あるいは間違っていますか? – Dyppl