正则表达式不返回此语法的匹配项

时间:2013-01-16 21:08:19

标签: regex

我想知道你是否可以提供建议,我已经搜索了大部分你的网站以获得类似的例子,但作为程序员,你的答案似乎对像我这样的初学者来说非常复杂

基本上我们有一个文件名结构,最少5个字符,最多6个字符,以12开头,然后是句号.然后.

后只有1到5之间的数字

示例文件名位于

之下
  

123456.1

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

如果我在没有1|2的情况下尝试,它会选择参考,但我需要第一个数字为12

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

希望这能从文本文件中选择以12开头的任何数字,最少5位,最多6位数,然后是一个句号,然后是另一个数字< / p>

基本上我想要选择的一些例子如下:

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

我希望我提供了足够的信息,如果没有,请告诉我。

2 个答案:

答案 0 :(得分:3)

^[12]\d{4,5}\.[1-5]$应该有用。

简短说明:

  • [12]匹配1或2
  • \d{4,5}匹配长度为最小4和最大5的任何(任意)数字序列(因为我们之前已将第一个数字与[12]匹配)
  • \.匹配一段时间
  • [1-5]匹配1到5之间的任何数字

答案 1 :(得分: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;
        }
    }