使用正则表达式匹配浮点范围

时间:2015-06-25 09:38:29

标签: regex

我需要一个正则表达式,它在一系列浮点数中匹配。

对于12.33 - 13.41的范围,我尝试了以下正则表达式:

(12 3-9] [3-9] |。?13 [0-4] [0-1])\ d {0,2}

但不匹配,即12.41或13.39。

这是否可以使用正则表达式?

亲切的问候, bernie70

3 个答案:

答案 0 :(得分:1)

匹配浮动范围12.33-13.41的简单方法是:

12\.(?:3[3-9]|[4-9]\d)|13\.(?:[0-3]\d|4[01])

扩展

   #  12.33  to  12.99
   12 \. 
   (?:
        3 [3-9] 
     |  [4-9] \d 
   )
|  
   #  13.00  to  13.41
   13 \. 
   (?:
        [0-3] \d 
     |  4 [01] 
   )

答案 1 :(得分:0)

我不知道它是否值得,但它是可能的。 试试:

(12.(3[3-9]|[4-9]\d))|(13(.([0-3]\d|4[01]))?)

意思是:

  • 12. - 从' 12开始。',
  • 3[3-9] - 3后跟数字3到9(33-39),
  • | - 或
  • [4-9]\d - 从4到9的数字,后跟任何数字(40-99),
  • | - 或
  • 13 - 以' 13'
  • 开头
  • . - dot
  • [0-3]\d - 从0到3的数字,后跟任意数字,
  • | - 或
  • 4[01] - 4后跟0或1,
  • ? - 零次或一次

(.([0-3]\d|4[01]))?被视为一个群组,以允许' 13'但不是' 13.'

它将匹配如:12.33,12.99,13.41,13,12.41,13.39等数字。 并将忽略:12.32,13.42等

您的代码无效,因为:

(12.[3-9][3-9]|13.?[0-4][0-1]?)\d{0,2}
  • [3-9][3-9] - 仅允许范围内的数字(33-39,43-49,53-59,...),
  • [0-4][0-1] - 仅允许数字(00,01,10,11,20,21,30,31,40,41),

因此存在巨大的省略范围

答案 2 :(得分:0)

谢谢您的提示。

我将正则表达式修改为以下内容:

(12(3 [3-9] | [4-9]))的 |。(13(([0-3] [0-8]))。。)| ^(13 [0-3] [9] [0] *)$

所以我可以匹配我想要的范围。