码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-06-27 23:04:49      阅读:412      评论:0      收藏:0      [点我收藏+]

标签:一个   没有   包括   自己   种类   整数   word   问题   单词   

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

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

\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,这个问题可以通过在字符串两边各加一个字母解决掉。

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

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

标签:一个   没有   包括   自己   种类   整数   word   问题   单词   

原文地址:https://www.cnblogs.com/tudou1179006580/p/11100155.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!