1

我想知道您是否可以提供建议,我主要在您的网站上搜索了类似的示例,但作为程序员,您的答案对于像我这样是这类事情的初学者的人来说似乎非常复杂

基本上我们有一个文件名结构,它最少有 5 个字符,最多有 6 个字符,并以1or开头2,然后是句号,.然后只有 1 到 5 之间的数字.

示例文件名如下

123456.1

我正在尝试创建一个正则表达式,当针对文本文件列表运行时,它将根据上面的语句选择正确的文件名,但是我已经尝试过了,但它不起作用

如果我尝试不使用1|2它来获取参考,但我需要第一个数字是12

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

希望这能从文本文件中挑选出任何以12和最小 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 回答