gpt4 book ai didi

java - 匹配任何数字的正则表达式(实数、有理数和符号)

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:03:27 29 4
gpt4 key购买 nike

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

  • 正面和负面
  • 十进制
  • 实数

下面的正则表达式很好,但有一个缺点

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

最佳答案

如果你想要一些看起来像 C float 的东西,下面是如何使用 Regexp::Common module from CPAN 让 Perl 吐出一个正则表达式来做到这一点:

$ 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]+))|))

documentation 表明它可以为您吐出的数字模式的完整可能语法是:

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

享受吧。

关于java - 匹配任何数字的正则表达式(实数、有理数和符号),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9341695/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com