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

irtuqstp  于 2023-06-30  发布在  其他
关注(0)|答案(3)|浏览(100)

我需要一个正则表达式,它在一个浮动范围内匹配。
对于范围12.33 - 13.41,我尝试了以下正则表达式:
(12.[3-9][3-9]| 13.?[0-4][0-1])\d{0,2}
但是它不匹配,即。12.41或13.39
正则表达式是否可以这样做?
亲切的问候,bernie 70

jhdbpxl9

jhdbpxl91#

我不知道这是否值得,但这是可能的。尝试使用:

(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'开头
  • .--点
  • [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),

所以有很大遗漏范围

ybzsozfc

ybzsozfc2#

谢谢你的提醒。
我将正则表达式修改为如下:
(12.(3[3-9]|[4-9]))。|(13(.([0-3][0-8])).)|^(13.[0-3][9][0])$
这样我就可以匹配我想要的范围。

axr492tv

axr492tv3#

匹配浮动范围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] 
   )

相关问题