Regex 正则表达式:如何匹配所有大于954的数字?
我尝试了Regex 正则表达式:如何匹配所有大于954的数字?,regex,Regex,我尝试了^([0-9]\d |\d{4,})$,但没有给出正确的结果。I不会为此使用正则表达式,因为您将陷入一个丑陋的模式链中 但是,如果仍然必须或想要使用正则表达式,可以使用如下正则表达式: [1-9]\d{3,}|9[6-9]\d|9[5-9]{2} 这个正则表达式背后的思想是: [1-9]\d{3,} --> This will match 4 or more digit numbers 9[6-9]\d --> This will match number
^([0-9]\d |\d{4,})$
,但没有给出正确的结果。I不会为此使用正则表达式,因为您将陷入一个丑陋的模式链中
但是,如果仍然必须或想要使用正则表达式,可以使用如下正则表达式:
[1-9]\d{3,}|9[6-9]\d|9[5-9]{2}
这个正则表达式背后的思想是:
[1-9]\d{3,} --> This will match 4 or more digit numbers
9[6-9]\d --> This will match numbers between 960 to 999
9[5-9]{2} --> This will match numbers between 955 to 999
you could write this pattern as `95[5-9]` to cover
numbers from 955 to 959 if you wish (it's up to you)
这是:
([1-9]\d{3,}|9[6-9]\d|95[5-9])
看到了
还有一张漂亮的图表:
您可以使用以下功能:
95[5-9]|9[6-9]\d|[1-9]\d{3,}
说明:
与95[5-9]
955-959
与9[6-9]\d
960-999
匹配[1-9]\d{3,}
>1000
^(?:[1-8][0-9]{3,}|9(?:[0-4][0-9]{2,}|[6-9][0-9]+|5(?:[5-9][0-9]*|[0-4][0-9]+)))$
注意:使用正则表达式模式执行此操作在大多数情况下是不合适的,也是复杂的(正则表达式不是为解决算术问题而设计的)。因此,如果可以,请将字符串转换为整数,并通过简单的比较进行测试。\b(?)
该行将匹配前导零和小数,但仅当整个值大于954时才匹配。因此,它将匹配955.62和0001253.125,但不匹配00954.999或125.967
要分解它:
(?表示如果数字前有句点,则不匹配。这是为了避免匹配0.957之类的内容
e2:0*
已添加,以与前导零完全匹配
(?:[1-9]\d{3,}9(?[6-9]\d|5[5-9])
设置小数点左侧所有实质性内容的匹配。[1-9]\d{3}
匹配等于或大于1000的任何数字。9(?[6-9]\d|5[5-9])
将900s中的任何数字与另一个或嵌套的数字进行匹配。当十位数和一位数为60-99或55-59时,内部或将匹配
(?:\。\d+)
是一个匹配小数的语句。结尾的?使其成为可选语句,以便匹配其中没有小数点的数字
e2:正则表达式被包装在\b
s中,以确保它是它自己的单词。正则表达式将不再匹配so1337、769或960
EDIT1:忘了把我的.literal
EDIT2:进行了标记为“e2:”的更改。我试图解析为特定查询捕获的数据库操作时间的应用程序日志文件。时间以毫秒为单位记录(例如,DatabaseTime=12035~ database Time=~12秒)。为了进一步说明,我需要查找应用程序UI在120秒后超时的情况(即DatabaseTime>120000),因此我可以捕获同一行上的时间戳
下面是我为正则表达式模式想到的:
[1-9][2-9][0-9]\d{3,}|[1-9]\d{6,}
在座的许多人都是正则表达式专家,足以在脑海中对其进行分析,但对于那些不是专家的人,我已经在regex101.com上对此进行了测试,这也为您展示了正则表达式的分解:
关于这个问题的一些想法/考虑(同样与原始问题完全相关):
- 我觉得我对此采取了一种非常简约的方法,然而,它
似乎已经满足了需要我搜索的用例
使用正则表达式搜索选项在NotePad++中浏览日志
- 我同意Regex不是模拟这种数值运算的解决方案
(如果不是这样,最好结合使用正则表达式和
一种编程/脚本语言)但我必须告诉你,如果你
需要在文本编辑器中快速搜索日志文件,例如
记事本++,而您没有耐心或客户端权限
创建一些漂亮的代码或安装Python插件,regex可能是
你唯一的快速(且公认的贪婪)选择,如果那是
在本例中,这是一个非常有用的场景
工作场所
最后,请允许我说明:在你做了初步的研究之后,你会有足够的时间来完成编码和效率的工作……为什么你一开始就找不到你要找的代码呢?一个小小的研究不会伤害任何人…而且每个人都知道罗马不是一天建成的。.regex用于在文本中查找模式,而不是计算数值。使用正则表达式查找一个数字,然后用您使用的语言对其进行数字比较。ehh我注意到发生了一些情况:D我将把它放回去,谢谢@dasblinkenlight您必须重新排列模式,因为99999
不匹配:).Put[1-9]\d{3,}
开头。看起来我的破坏了图表生成器…它显示了2+次,但应该是3+…9999-“部分”匹配…我也不会为此使用正则表达式。:)谢谢@nevermind,重新安排模式:P,它现在起作用了。我没有使用您提供的正则表达式字符串找到与955.62或0001253.125的匹配项。0001253.125不是完全匹配项。我将更新它,使其也与前导零匹配。不过,我在匹配955.62时没有遇到任何问题。而且,根据regex101 lin,结果也是这样k我之前发布过,我在那里输入的look-behind断言在js或golang中不起作用。它不匹配小数,但假设它唯一的整数是OP之后的整数,我看不出你的代码有任何问题。我一开始就编辑这个问题,因为这是一个有效的答案。@finnrayment谢谢你,我感谢你的反馈。是的,在我的使用中se日志不显示任何小数,但您已经为其他希望这样做的人声明了一个有效的间隔。
[1-9][2-9][0-9]\d{3,}|[1-9]\d{6,}