我写了一个正则表达式来匹配任何数字:
以下正则表达式表现不错,但有一个缺点
([\+\-]{1}){0,1}?[\d]*(\.{1})?[\\d]*
对于 + 或 - 等输入也是正面的。任何指针将不胜感激。感谢。
正则表达式应该使用以下输入
5,+ 5,-5,0.5,+ 0.5,-0.5,.5,+ 5,-.5
并且不应与以下输入匹配
+
-
+
-
以下是tchrist的回答,完美无缺。
(?:(?i)(?:[+-]?)(?:(?=[.]?[0-9])(?:[0-9]*)(?:(?:[.])(?:[0-9]{0,}))?)(?:(?:[E])(?:(?:[+-]?)(?:[0-9]+))|))
答案 0 :(得分:5)
如果你想要一个看起来像C浮点数的东西,下面是如何利用Regexp::Common module from CPAN哼哼Perl咳出一个正则表达式,使用documentation:
$ perl -MRegexp::Common -le 'print $RE{num}{real}'
(?:(?i)(?:[+-]?)(?:(?=[.]?[0123456789])(?:[0123456789]*)(?:(?:[.])(?:[0123456789]{0,}))?)(?:(?:[E])(?:(?:[+-]?)(?:[0123456789]+))|))
如果你愿意,你可以稍微调整一下,但这可以为你提供基本的想法。
它非常灵活。例如,这会为基数为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]+))|))
{{3}}表明它可以为您吐出的数字模式的完整可能语法是:
$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}
让它真正为您想要的任何东西定制它。是的,当然你可以在Java中使用这些模式。
享受。
答案 1 :(得分:3)
您需要至少一位数字,即+
使用*
代替\d
。
我认为你也可以将{1}
放在几个地方,因为这是默认隐含的
同样,{0,1}
?
给我们:
regex = "[+-]?(\\d+|\\d*\\.?\\d+)";
答案 2 :(得分:1)
我认为应该这样做:
[+-]?\d*(\.\d+)?
编辑:
我已对其进行了改进,因此它与-123.
上的点不匹配,但会与123.456
EDIT2:
所以它只与+或 - 不匹配,你可以检查这样的符号必须在点或数字之前,这个点是可选的。
[+-]?(?=[\.?\d])\d*(\.\d+)?