1

私はあなたがアドバイスできるかどうか疑問に思っていました、私はほとんどあなたのサイトで同様の例を探しましたが、プログラマーとしてあなたの答えはこの種のものの初心者である私のような誰かには非常に複雑に見えます

1基本的に、ファイル名の構造は、最小5文字、最大6文字で、またはのいずれかで始まり、2終止符が.続き、その後に1から5までの数字のみが続きます。.

ファイル名の例を以下に示します。

123456.1

テキストファイルリストに対して実行したときに上記のステートメントに従って正しいファイル名を選択する正規表現を作成しようとしていますが、これを試しましたが、機能しません

それなし1|2で試してみると、参照を取得しますが、最初の桁がまたはである必要があり1ます2

^1|2\d{5,6}][\.][0-5]{1}$

これがテキストファイルから、1またはで始まり2、最小で5桁、最大で6桁で始まり、その後にピリオドが続く任意の数字を選択することを期待しています。

基本的に私がそれを選びたいいくつかの例は以下の通りです:

123456.1  OK
25689.2   OK
061589.2  NOT OK
1235.6    NOT OK
765812.1  NOT OK
289657.5  OK

私は十分な情報を提供したと思います、そうでない場合は私に知らせてください。

4

2 に答える 2

3

^[12]\d{4,5}\.[1-5]$動作するはずです。

簡単な説明:

  • [12]1 または 2 のいずれかに一致します
  • \d{4,5}最小 4 と最大 5 の長さの (任意の) 数字の任意のシーケンスに一致します (最初の数字は既に[12]前と一致しているため)
  • \.ピリオドに一致
  • [1-5]1 から 5 までの任意の数字に一致します
于 2013-01-16T21:10:51.867 に答える
0

実際に数値を検証しているのなら、実際に数値を検証してみませんか?(この答えは少し気難しいかもしれません)

  class Program
    {
        private static readonly string[] Items =
        {
            "123456.1",
            "25689.2",
            "061589.2", //NOT
            "1235.6", //NOT
            "765812.1", //NOT
            "289657.5"
        };
        static void Main()
        {
             foreach (string item in Items)
             {
                 Console.WriteLine(Validate(item));
             }
            Console.ReadKey();
        }
        static bool Validate (string item)
        {
            decimal d;
            if (decimal.TryParse(item,out d))
            {
                if (((d < 10000.1m) || (d > 299999.5m)) ||
                    ((d > 29999.5m) &&  (d < 100000.1m))) return false;
                // validate fraction here
                var i = d - decimal.Truncate(d);
                return (i >= 0.1m && i <= 0.5m);
            } 
            return false;
        }
    }
于 2013-01-16T21:37:43.833 に答える