找到粗体数字的正则表达式是什么?

时间:2013-02-27 15:12:04

标签: regex

我试过了\b[0-9]{1,4}\.[0-9]{1,3}\.[0-9]{0,3},但它错过了34.89和23.89

我想要下面文本中的所有数字序列,除了28.72%

34.89
0105.93.10  ghghghh
0105.93.20  ghghhh 
jjjjjhjj 0105.93.30 jsdfsd iksifsdjfk sdfsdk
0105.93.40ierfgg dfgkdfg dfgolgh 23.89
28.72%

由于

3 个答案:

答案 0 :(得分:2)

你的正则表达式需要两个点。您需要将最后一位数字序列设为可选,并且您需要排除跟随%或其他数字的匹配项(否则28.7内的28.72%将匹配):

\b[0-9]{1,4}\.[0-9]{1,3}(?:\.[0-9]{1,3})?(?![0-9%])

答案 1 :(得分:1)

使最后一部分可选

\b[0-9]{1,4}\.[0-9]{1,3}(?:\.[0-9]{0,3})?

您的原始表达需要这段时间。

您对匹配%的规则并不十分具体,所以我做了这个:

\b[0-9]{1,4}\.[0-9]{1,3}(?:\.[0-9]{0,3})?(?=[^%\d]|$)

最后一部分是任何非%非数字字符或行尾的正向前瞻。它也必须是非数字的,否则28.7将匹配表达式的其余部分,最后2匹配非百分号。

答案 2 :(得分:0)

这将找到所有数字组,由单个点分隔,后面没有%

(?:\d+\.)+\d+(?!\%)

点的每一侧至少需要一位数字。除此之外,它并不关心每组中有多少位数。在要求时,数字中至少有一个点。

这还要求每个组都有2到4位数字:

(?:\d{2,4}\.)+\d{2,4}(?!\%)