正则表达式可以匹配任何数字(实数,有理数和符号)

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

  • 正面和负面的
  • 小数
  • 实数

以下正则表达式效果不错,但有一个缺点

([\+\-]{1}){0,1}?[\d]*(\.{1})?[\\d]*

对于 或 等输入也为正。任何指针将不胜感激。谢谢。

正则表达式应与以下输入配合使用

5,+ 5,-5、0.5,+ 0.5,-0.5,.5,+。5,-。5

并且不应该与以下输入匹配

+

--

+。

-

(?:(?i)(?:[+-]?)(?:(?=[.]?[0-9])(?:[0-9]*)(?:(?:[.])(?:[0-9]{0,}))?)(?:(?:[E])(?:(?:[+-]?)(?:[0-9]+))|))

回答:

如果您想要一个看起来像C浮点数的东西,这是使用CPAN的Regexp

::

Common模块,使Perl发痒的正则表达式的方法:

$ perl -MRegexp::Common -le 'print $RE{num}{real}'

(?:(?i)(?:[+-]?)(?:(?=[.]?[0123456789])(?:[0123456789]*)(?:(?:[.])(?:[0123456789]{0,}))?)(?:(?:[E])(?:(?:[+-]?)(?:[0123456789]+))|))

您可以根据需要进行调整,但这可以为您提供基本的想法。

它确实非常灵活。例如,这为以3为基数的实数倒出了一个模式,即允许每三个位置使用逗号:

$ perl -MRegexp::Common -le 'print $RE{num}{real}{-base => 2}{-sep => ","}{-group => 3}'

(?:(?i)(?:[+-]?)(?:(?=[.]?[01])(?:[01]{1,3}(?:(?:[,])[01]{3})*)(?:(?:[.])(?:[01]{0,}))?)(?:(?:[E])(?:(?:[+-]?)(?:[01]+))|))

该文档显示,它可以为您吐出的数字模式的完整语法为:

$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中使用这些模式。

请享用。

以上是 正则表达式可以匹配任何数字(实数,有理数和符号) 的全部内容, 来源链接: utcz.com/qa/430740.html

回到顶部