踩坑正则表达式-匹配字符串中的整数和小数

Posted tudou1179006580

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了踩坑正则表达式-匹配字符串中的整数和小数相关的知识,希望对你有一定的参考价值。

首先,明白几个边界匹配器字符的含义。

^:整行字符串的开头位置

\A:整段字符串的开头位置

$:整行字符串的结尾位置

\z:整段字符串的结尾位置

关于\b\B,官方原版的解释中是A word boundary和A non-word boundary,没有详细的解释,反正我是没看明白,自己测试一下,匹配字符串:6lo.ve,正则表达式:\B\D。结果共三处,包括lov 三个字母。

那么我们是不是可以认为\B\D表示:匹配一个任意非数字的字符,并且字符的前一位是字母或者数字,此时这个单词不是边界单词;\b\D表示:匹配一个任意非数字的字符,并且字符的前一位不是字母或者数字,此时是一个边界单词。


再来说说数字的匹配,先来一个示例字符串:"78.64java23.678love98py3.4.5c78c++144vv7vv12..12r45v.56v56."

最简单的正则表达式为:[0-9]+(\.[0-9]+)?,可以匹配绝大多数的结果,但是如果字符串中包括3.4.512..12.5678.这种数字的,会被匹配出来3.4512125678

那我们是不是能把这几个特殊的去除掉呢?后来又想到一种匹配规则:[0-9]+\.0,1[0-9]+\.0[0-9],你有没有发现这个匹配是有点问题的,你来看啊:

  • 第一个.前面的数字是一个或者多个,后面的数字也是一个或者多个;
  • 第二个.后面的数字是一位,也就是说。

也就是说,这个规则匹配到的数字至少是三位整数,如果带有小数的话,至少要带有两位小数(整数位至少也要保证一个位数)


假设字符串里面除了字母、数字和小数点不再包含别的东西,那么我们是不是可以试试另外一种匹配模式:\B[0-9]+\.0,1[0-9]+\B,这个匹配中\B表示数字旁边的必定是一个单词(即数字或者字母),这样就可以排除掉3.4.512..12.5656.这种类型的数字,但是这个也有一些缺点:

  • 字符串只包含字母、数字和小数点;
  • 匹配的数字是从两位起步的;
  • 字符串的开头和结尾不能为数字,不然会被舍弃掉,例如上述字符串中78.64会变成8.64,这个问题可以通过在字符串两边各加一个字母解决掉。

暂时爬坑到这里,后续有进展接着更新...

以上是关于踩坑正则表达式-匹配字符串中的整数和小数的主要内容,如果未能解决你的问题,请参考以下文章

正则表达式验证文本框只能输入数字和小数点

正则表达式匹配字符串中是否的整数价格和小数价格

判断只能输入 大于0的整数或小数 正则表达式 怎么写

求一个正则表达式只能输入数字小数点后两位和

C#文本框的文本,正则表达式约束,正整数和小数点后只有一位小数

正则表达式 可以输入负数、正数、小数(小数保留一位)。