我写了一个正则表达式来匹配任何数字:
以下正则表达式做得很好,但有一个缺点
([\+\-]{1}){0,1}?[\d]*(\.{1})?[\\d]*
Run Code Online (Sandbox Code Playgroud)
对于诸如+或- 的输入也是积极的.任何指针将不胜感激.谢谢.
正则表达式应该与以下输入一起使用
5,+ 5,-5,0.5,+ 0.5,-0.5,.5,+ 5,-.5
并且不应与以下输入匹配
+
-
+.
- .
.
这是tchrist的答案,完美无缺.
(?:(?i)(?:[+-]?)(?:(?=[.]?[0-9])(?:[0-9]*)(?:(?:[.])(?:[0-9]{0,}))?)(?:(?:[E])(?:(?:[+-]?)(?:[0-9]+))|))
Run Code Online (Sandbox Code Playgroud)
如果你想要一个看起来像C浮点数的东西,下面是如何使用CPAN的Regexp :: Common模块来搔出Perl来咳出一个正则表达式来做到这一点:
$ perl -MRegexp::Common -le 'print $RE{num}{real}'
(?:(?i)(?:[+-]?)(?:(?=[.]?[0123456789])(?:[0123456789]*)(?:(?:[.])(?:[0123456789]{0,}))?)(?:(?:[E])(?:(?:[+-]?)(?:[0123456789]+))|))
Run Code Online (Sandbox Code Playgroud)
如果你愿意,你可以调整一下,但这给你基本的想法.
它非常灵活.例如,这会为基数为2的实数吐出一个模式,每三个位置允许逗号:
$ perl -MRegexp::Common -le 'print $RE{num}{real}{-base => 2}{-sep => ","}{-group => 3}'
(?:(?i)(?:[+-]?)(?:(?=[.]?[01])(?:[01]{1,3}(?:(?:[,])[01]{3})*)(?:(?:[.])(?:[01]{0,}))?)(?:(?:[E])(?:(?:[+-]?)(?:[01]+))|))
Run Code Online (Sandbox Code Playgroud)
该文件显示,该数值模式的充分可能的语法可以吐出你的是:
$RE{num}{int}{-base}{-sep}{-group}{-places}
$RE{num}{real}{-base}{-radix}{-places}{-sep}{-group}{-expon}
$RE{num}{dec}{-radix}{-places}{-sep}{-group}{-expon}
$RE{num}{oct}{-radix}{-places}{-sep}{-group}{-expon}
$RE{num}{bin}{-radix}{-places}{-sep}{-group}{-expon}
$RE{num}{hex}{-radix}{-places}{-sep}{-group}{-expon}
$RE{num}{decimal}{-base}{-radix}{-places}{-sep}{-group}
$RE{num}{square}
$RE{num}{roman}
Run Code Online (Sandbox Code Playgroud)
真正为您想要的任何东西定制它.是的,当然你可以在Java中使用这些模式.
请享用.