我试过了\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%
由于
保
答案 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}(?!\%)