我试过\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%
谢谢
保罗
我试过\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%
谢谢
保罗
您的正则表达式需要存在两个点。您需要使最后一个点数序列可选,并且您需要排除匹配的位置或%
另一个数字(否则将匹配):28.7
28.72%
\b[0-9]{1,4}\.[0-9]{1,3}(?:\.[0-9]{1,3})?(?![0-9%])
使最后一部分可选
\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
匹配非百分比字符。
这将找到所有数字组,由单点分隔,后面没有%
:
(?:\d+\.)+\d+(?!\%)
它要求点的每一侧至少有一个数字。除此之外,它不关心每组中有多少位数。At 要求数字中至少有一个点。
这还需要每个组有 2 到 4 位数字:
(?:\d{2,4}\.)+\d{2,4}(?!\%)