Kel*_*nch 14 regex floating-point
什么是处理浮点数的好正则表达式(即像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
Run Code Online (Sandbox Code Playgroud)
总之,它应该
对于那些想知道的人,是的,这是一个家庭作业问题.我们在编译器的CS课程中收到了这个作业.我已经把我的答案交给了班级,并将其作为这个问题的答案发布.
[Epilogue]我的解决方案没有得到充分的信任,因为它没有处理小数点左边的超过1位数.赋值确实提到了处理Java浮点数,即使这些示例都没有小数点左边的1位数.我会在自己的帖子中发布已接受的答案.
Ale*_*lli 23
只需使小数点和E-then-exponent部分可选:
[1-9][0-9]*\.?[0-9]*([Ee][+-]?[0-9]+)?
Run Code Online (Sandbox Code Playgroud)
我不明白你为什么不想领导[+-]?一个可能的标志,但是,无论如何! - )
编辑:实际上可能没有小数点左边的数字(在这种情况下,我想必须有小数点和后面的1+位数!),所以显然需要一个竖线(替代):
(([1-9][0-9]*\.?[0-9]*)|(\.[0-9]+))([Ee][+-]?[0-9]+)?
Run Code Online (Sandbox Code Playgroud)
[这是教授的答案]
限定:
N = [1-9]
D = 0 | N
E = [eE] [+ - ]?D +
L = 0 | (ND*)
然后浮点数可以匹配:
((L.D*| .D +)E?)| (LE)
使用D +而不是L,并且前缀为[+ - ]?也是可以接受的.
一个常见的错误就是写D*.D*,但这只能匹配'.'.
[编辑]
有人询问一个主要标志; 我应该问他为什么被排除但从未有机会.由于这是关于语法的讲座的一部分,我的猜测是它要么使问题更容易(不太可能),要么在解析问题集的地方有一个小细节,使浮点值,无论符号,是重点(可能).
如果您正在解析表达式,例如
-5.04e-10 + 3.14159E10
浮点值的符号是要应用于值的操作的一部分,而不是数字本身的属性.换一种说法,
减法(5.04e-10)
加(3.14159E10)
形成表达式的结果.虽然我确信数学家可能会争论这一点,但请记住这是一篇关于解析的讲座.