正则表达式中的数字与小数匹配

时间:2011-07-02 02:49:41

标签: regex

我想看看我的号码是否在两个其他号码之间。比方说我的数字是0.17。我希望正则表达式是这样的:[0.15-0.22]。有人可以帮助我走上正轨吗?

3 个答案:

答案 0 :(得分:2)

如果您确定您的号码始终是有效号码,那么您不需要正则表达式。只需检查$num < 0.22 && $num > 0.15

如果您的号码无效,请使用正则表达式对其进行过滤:

preg_match( "/[0-9]*(\.[0-9]*)/", $num, $matches );
$num = $matches[0];

答案 1 :(得分:1)

这是一个让你入门的正则表达式,但它是很多工作,不太可能是非常有益的。如果可以,请使用@Dark Slipstream的想法。

(?<!\d)0?\.(?:1[5-9]|2[0-1]|220*([^1-9]|$))

参见;-)这就是为什么正则表达式不是为解决你的问题而设计的。

听起来你想要一个通用的解决方案,所以当它是 posible 时,你还没有写下足够的细节。你需要考虑你正在寻找的数字的精确度,以及你想要一个包容性或排他性的范围(或者最简单的范围)。顺便说一句,最简单的是左侧是包容性的,右侧是独占的(区间符号[0.15 - 0.22)),因为你可以简单地从.01中减去.22然后分解问题分为2-3个部分\.(?:1[5-9]|.2[0-1])

答案 2 :(得分:1)

我认为你应该重新考虑一下你的方法。不要试图匹配正则表达式中的范围(这可能是可行的,但不是很漂亮),尝试匹配您正在寻找的数字,然后使用您喜欢的语言测试它是否在正确的范围内。这是一个Python3会话:

>>> import re
>>> a_string = "A number can be 0.17 or 0.163 but certainly not 0.47 or -1.2!"
>>> matches = re.findall(r'(-?[0-9]+\.?[0-9]+)', a_string)
>>> print(matches)
['0.17', '0.163', '0.47', '-1.2']
>>> nums = [n for n in [float(c) for c in matches] if n < 0.22 and n > 0.15]
>>> print(nums)
[0.17, 0.163]