如何使用正则表达式检测浮点数

什么是用于处理浮点数的良好正则表达式(例如,类似于Java的Float)


答案必须符合以下目标:


 1) 1.  

 2) .2   

 3) 3.14  

 4) 5e6  

 5) 5e-6  

 6) 5E+6  

 7) 7.e8  

 8) 9.0E-10  

 9) .11e12  

总之,它应该


忽略前面的迹象

要求小数点左边的第一个字符为非零

小数点两侧允许0或多个数字

允许数字不带小数点

允许科学计数法

允许使用大写字母或小写字母“ e”

允许正或负指数

对于那些想知道的人,是的,这是一个作业问题。在我的研究生CS编译器课程中,我们以此作为作业。我已经提交了班级答案,并将其发布为该问题的答案。


[结束语]我的解决方案没有得到充分的认可,因为它处理的小数点左边不超过1位。即使没有示例在小数点左边多于1位数字,该分配也确实提到了处理Java浮点数。我将接受的答案张贴在自己的帖子中。


守着一只汪
浏览 774回答 3
3回答

万千封印

只需将小数点和E-then-指数部分都设置为可选:[1-9][0-9]*\.?[0-9]*([Ee][+-]?[0-9]+)?我不明白为什么您也不想让领导[+-]?也捕获可能的信号,但是,无论如何!-)编辑:实际上可能没有小数点剩余的数字(在这种情况下,我想必须有小数点和其后的1+数字!),因此显然需要竖线(替代):(([1-9][0-9]*\.?[0-9]*)|(\.[0-9]+))([Ee][+-]?[0-9]+)?

猛跑小猪

这是我上交的。(([1-9]+\.[0-9]*)|([1-9]*\.[0-9]+)|([1-9]+))([eE][-+]?[0-9]+)?为了便于讨论,我将这些部分标记为( ([1-9]+ \. [0-9]* ) | ( [1-9]* \. [0-9]+ ) | ([1-9]+))  ( [eE] [-+]? [0-9]+ )?     --------------------------------------------------------  ----------------------                               A                                       BA:将所有内容匹配到“ e / E”B:匹配科学计数法分解A我们得到三个部分 ( ([1-9]+ \. [0-9]* ) | ( [1-9]* \. [0-9]+ ) | ([1-9]+) )   ----------1----------   ---------2----------   ---3----第1部分:允许小数点后的1-9,十进制,0个或多个数字(目标1)第2部分:允许小数点后的1-9,十进制,0个或多个数字(目标1)2)第3部分:允许1-9中的1个或多个数字,不带小数(请参阅目标列表中的#4)分解B我们得到4个基本部分 ( [eE] [-+]? [0-9]+  )?      ..--1- --2-- --3--- -4- .. 第1部分:要求科学表示法使用大写或小写的“ e”(例如目标8和9);第2部分:允许对指数使用可选的正号或负号(例如目标4、5和6)。第3部分:允许1或指数的更多数字(目标8)第4部分:允许科学记号作为一个组是可选的(目标3)
打开App,查看更多内容
随时随地看视频慕课网APP