当前位置: 首页 > 面试题库 >

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

璩珂
2023-03-14
问题内容

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

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

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

([\+\-]{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浮点数的东西,这是使用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中使用这些模式。

请享用。



 类似资料:
  • 问题内容: 我正在使用模块中的函数来匹配某些东西,并且一切正常。 现在,我需要找出我有多少场比赛。是否可以不两次遍历迭代器?(先找出计数然后是真正的迭代) 一些代码: 一切正常,我只需要在循环之前获取匹配数即可。 问题答案: 如果您知道需要所有匹配项,则可以使用该功能。它将返回所有匹配项的列表。然后,您可以只进行匹配次数。

  • 问题内容: 我是正则表达式新手,但我了解如何按顺序匹配正则表达式查询中的任何字符(例如[abc]将匹配a,b或c中的任何一个。此外,我相信“ abc”将完全匹配abc)。 但是,我该如何构造一个以任何顺序匹配所有字符abc的正则表达式查询?因此,例如,我希望它匹配“ cab”或“ bracket”。我使用Python作为脚本语言(不确定是否重要)。 问题答案: 在Python中,我不会为此目的使用

  • 本文向大家介绍Python正则表达式匹配字符串中的数字,包括了Python正则表达式匹配字符串中的数字的使用技巧和注意事项,需要的朋友参考一下 1.使用“\d+”匹配全数字 代码: 结果: ['479', '501', '870', '209', '213', '650'] 但是上述这种方式也会引入非纯数据,例子如下: 结果: ['479', '501', '870', '209', '213',

  • 以下模式需要一个组合正则表达式: 其中带数字的分隔符可以是空格()、减号(-)、句点(.),反斜杠(\),等于(=)。一种情况是,一个以上的分隔符(相同或不同类型)不能与任意两位数字同时出现一次以上。 有效号码- 一个有效的输入是,只要没有两个相邻的分隔符,就有16位数字被任意/无分隔符分隔。 我们想出了以下正则表达式: 它与某些模式不匹配。例如: 对于相同的数字,它匹配(如预期的)以下模式: 分

  • 问题内容: 我有一串 字符串1 (不包括引号)->“我的车号是# 8746253 ,这实际上很酷” 条件-数字8746253可以是任意长度,并且 -数字也可以紧跟在行尾。 我要分组 8746253 ,不应在其后加上点“”。 我努力了, 。#(\ d +)[^。]。 这可以肯定地得到我的数字,但是即使有一个点也可以匹配,因为[。^]将匹配数字的最后一位(例如,在下面的情况下为 3 ) 字符串2 (不

  • 正则表达式如何匹配出这个字符串'calc(100vh - 420px)'中的数字420