正则表达式可以匹配任何数字(实数,有理数和符号)
我写了一个正则表达式来匹配任何数字:
- 正面和负面的
- 小数
- 实数
以下正则表达式效果不错,但有一个缺点
([\+\-]{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