-4

我试过\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%

谢谢

保罗

4

3 回答 3

2

您的正则表达式需要存在两个点。您需要使最后一个点数序列可选,并且您需要排除匹配的位置或%另一个数字(否则将匹配):28.728.72%

\b[0-9]{1,4}\.[0-9]{1,3}(?:\.[0-9]{1,3})?(?![0-9%])
于 2013-02-27T15:20:55.427 回答
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匹配非百分比字符。

于 2013-02-27T15:25:19.330 回答
0

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

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

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

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

(?:\d{2,4}\.)+\d{2,4}(?!\%)
于 2013-02-27T15:20:15.227 回答