Regex 匹配大于40的数字

Regex 匹配大于40的数字,regex,Regex,我正在尝试匹配大于40的数字。好的一点是,它们都有两个小数位,所以它们都像:3.25、5.89、999.75,并且它们不使用任何前导零(小数部分总是有两位数字除外)。。。 起初,我尝试了下面的代码,但后来我意识到这与像1001000这样的数字不匹配。。。即使它们大于40 [4-9][0-9]\. 我不必匹配小数部分,所以不必担心匹配,只要帮我找到如何匹配大于40的数字(最多9999就可以了) 谢谢您的帮助。不要使用正则表达式进行数字比较。例如,如果您使用的是Javascript: var aN

我正在尝试匹配大于40的数字。好的一点是,它们都有两个小数位,所以它们都像:3.25、5.89、999.75,并且它们不使用任何前导零(小数部分总是有两位数字除外)。。。 起初,我尝试了下面的代码,但后来我意识到这与像1001000这样的数字不匹配。。。即使它们大于40

[4-9][0-9]\.
我不必匹配小数部分,所以不必担心匹配,只要帮我找到如何匹配大于40的数字(最多9999就可以了)


谢谢您的帮助。

不要使用正则表达式进行数字比较。例如,如果您使用的是Javascript:

var aNumber = parseFloat("50");
if (aNumber > 40) {
    // yay!
}

可以使用括号表示要匹配的最小字符数,如果需要,还可以表示最大字符数。所以

([4-9][0-9]|[1-9][0-9]{2,})\.
匹配4-9,后跟一个或多个数字。大概在开始的时候有一个边界,但听起来你已经解决了这个部分。这使用OR来允许两组可能的第一个数字

(40\.(?!0[^\d]|00)\d{1,2}|(((4[1-9](?!\d)|[5-9][0-9])(?![\d])|\d*[1-9]\d{2,})(\.\d{1,2})?))
这可以防止误报导致0

这对我有用

  • 它尝试匹配40,后跟1或2个不是00的小数
  • 然后它尝试匹配4,后跟1-9,十进制可选
  • 如果不匹配,则匹配5-9后跟0-9,十进制可选
  • 然后它尝试匹配任意数字,任意次数,后跟1-9,后跟1或2位,十进制可选
如果需要小数,只需删除最后一个问号。

这样就可以了:

([4-9][0-9]+|\d{3,})
这将得到前一个大于4的两位数的所有数字或任何三位数的数字


例如

这应该可以完成以下工作:

([4-9][0-9]|\d{3,})\.
请在此处查看:

如果您的正则表达式可以使用负查找来匹配41到9999之间的数字,而不带小数:

\b(?:[1-9][0-9]{2,3}|[5-9][0-9]|4[1-9])(?<!\.\d{1,2})\b
\b(?[1-9][0-9]{2,3}|[5-9][0-9]|4[1-9])(?(其他大多数答案对我来说都是完美的——这是偏执狂和坏主意:)

对于与
grep-Po
Perl
一起使用,我们可以使用:

'\b(\d{3,}|[4-9]\d)\.\d\d'
但这将得到40.00(不大于40)

对应于:

     DDD.DD 
| [5-9]D.DD
| 4[1-9].DD 
|     40.D[1-9] 
|     40.[1-9]D
在flex(1)中,您有以下代码来解析字符串并获得大于40的数字:

普鲁士: 安装flex并用它编译此文件

make pru
然后按以下方式运行:

pru <filein >fileout
这段代码从列出的正则表达式构造一个确定性有限自动机,并在识别大于40的值时打印右侧列出的命令。它允许前导可选符号和前导零,以及由任意数字组成的可选小数部分。它只使用一个辅助符号和一个d读取每个字符的指定。您可以访问flex生成的自动机状态表(它为您编写C代码)

识别大于40的数字(带小数、前导符号和零)的正则表达式是:

可简化为:

\+?(0*[4-9][0-9]|0*[1-9][0-9]{3,})(\.[0-9]*)?
说明:

  • \+?匹配可选加号
  • (…|…)两种选择:
  • 0*可选任意数量的引入零
  • [4-9][0-9]数字40到99
  • [1-9][0-9]{3}数字100及以上
  • ([0-9]*)?可选小数点后跟任意位数

这是最不适合使用正则表达式的地方。为什么要使用正则表达式?将字符串转换为数字并使用
运算符不是更容易吗?欢迎使用SO!请查看标签信息(将鼠标悬停在标签上):正则表达式的一般参考:请记住包含一个标记,指定您正在使用的编程语言或工具。@Robert:我有一秒钟感到困惑,然后单击了用户名链接。:@RobertP您在自言自语吗?:/#$%#我刚刚意识到你们之间只有点的区别,哈哈。。我必须打印这个。这个正则表达式在100到139之间根本不匹配。哎呀,你说得对。我专注于多个数字,忘记了1-3。我会更新,以后会喝更多的咖啡。他要求大于40,我的正则表达式确实匹配了大于40的整数。此后,我对其进行了更新,以匹配>=40的任何内容。01@Andie2302谢谢,修复了。如果你像这样添加一个
+
,它将被修复<代码>([4-9][0-9]+|\d{3,})
pru <filein >fileout
pru
\+?(0*[4-9][0-9]|0*[1-9][0-9][0-9][0-9]*)(\.[0-9]*)?
\+?(0*[4-9][0-9]|0*[1-9][0-9]{3,})(\.[0-9]*)?