如何使用浮点数捕获特定范围内的数字?

时间:2019-03-25 23:35:07

标签: python regex floating-point

问题直截了当。我有一些数字,我尝试匹配0到110之间的数字。假设我们有五个数字:

  

99.9

     

108.712718

     

110

     

110.2

     

9

在这里,我需要匹配除第四个以外的所有字符。 我试了很多捕获组,正/负前瞻等。什么都不适合我。没有浮点数很容易,但是在这里我挣扎了很多。

P.S。我正在使用Python。

2 个答案:

答案 0 :(得分:1)

类似的事情应该起作用:

(?<!\.)\b0*(?:(?:\d\d?|10\d)(?:\.\d+)?|110(?:\.0+)?)\b(?!\.\d)
  • (?<!\.)的意思是“不带点(\.)”
  • \b是边界一词
  • 0*的意思是“前面有零个或多个0
  • (\d\d?|10\d)的意思是“一个数字后跟另一个可选数字(\d\d? 10后跟任何数字”
  • 然后是一个可选的“点和一个或多个数字”((\.\d+)?
  • 最后两个点在“或”中,其简单数字为110,在点((?:\.0+)?之后有一个或多个0
  • 与数字结尾匹配的另一个单词边界
  • 最后是(?!\.\d),其意思是“不跟点和数字”

请参见here演示。

P.S。如果您要匹配整个字符串的对应关系,则负向前瞻和向后搜索是无用的。

答案 1 :(得分:0)

这必须分为三块。
1)110
2)100-109.9999999 ...
3)0-99.9999999 ...

模式: ^(?:(?:10[0-9]|[0-9][0-9]?)(?:\.[0-9]+)?|110)$

^行首
(?:启动非捕获组
(?:10[0-9]|[0-9][0-9]?)捕获100-109或00-99
(?:\.[0-9]+)?捕获小数点及其后的数字0或1次
|
110从字面上捕获110
)个非捕获组
$行的结尾

简单。有什么问题吗

edit:事后,如果您不希望前导零(例如00、01、02等),可以将模式稍微更改为^(?:(?:10[0-9]|[1-9]?[0-9])(?:\.[0-9]+)?|110)$,将更改为[1-9]?[0-9]而不是{ {1}}