为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

守着一只汪 2019-11-02 14:31:02
什么是用于处理浮点数的良好正则表达式(例如,类似于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浮点数。我将接受的答案张贴在自己的帖子中。
查看完整描述

3 回答

?
万千封印

TA贡献1891条经验 获得超3个赞

只需将小数点和E-then-指数部分都设置为可选:


[1-9][0-9]*\.?[0-9]*([Ee][+-]?[0-9]+)?

我不明白为什么您也不想让领导[+-]?也捕获可能的信号,但是,无论如何!-)


编辑:实际上可能没有小数点剩余的数字(在这种情况下,我想必须有小数点和其后的1+数字!),因此显然需要竖线(替代):


(([1-9][0-9]*\.?[0-9]*)|(\.[0-9]+))([Ee][+-]?[0-9]+)?


查看完整回答
反对 回复 2019-11-02
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

这是我上交的。


(([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                                       B

A:将所有内容匹配到“ 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)


查看完整回答
反对 回复 2019-11-02
  • 3 回答
  • 0 关注
  • 826 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信