正则表达式匹配任何数字(真实,理性和符号)

Rag*_*har 6 java regex

我写了一个正则表达式来匹配任何数字:

  • 正面及负面
  • 十进制
  • 真实的数字

以下正则表达式做得很好,但有一个缺点

([\+\-]{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)

tch*_*ist 5

如果你想要一个看起来像C浮点数的东西,下面是如何使用CPANRegexp :: 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中使用这些模式.

请享用.