如何同时匹配字符串中的整数和浮点数

简介: 如何同时匹配字符串中的整数和浮点数

如何同时匹配字符串中的整数和浮点数

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

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

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

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

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

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

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


再来说说数字的匹配,先来一个示例字符串:

"78.64java23.678love98py3.4.5c78c++144vv7vv12..12r45v.56v56."


最简单的正则表达式为:[0-9]+(\.[0-9]+)?

这个可以匹配绝大多数的结果,但是如果字符串中的 3.4.5、 12..12、 .56、 78. 这种数字的,会被匹配出来3.4、 5 12、 125678。这些并不是我们想要的结果。


那我们是不是能把这几个特殊的去除掉呢?后来又想到一种匹配规则:[0-9]+\.{0,1}[0-9]+\.{0}[0-9]

你有没有发现这个匹配是有点问题的:

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

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


假设字符串里面除了字母、数字和小数点不再包含别的东西,那么我们是不是可以试试另外一种匹配模式:\B[0-9]+\.{0,1}[0-9]+\B

这个匹配中, \B 表示数字旁边的必定是一个单词(即数字或者字母),这样就可以排除掉 3.4.5、 12..12、 .56、 56.这种类型的数字,但是这个也有一些缺点:

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

暂时爬坑到这里,接着提供两种思路:

1、是先匹配出里面的整数或者小数,再进行筛选,做两次正则匹配;

2、先找出非数字和小数点的东西,替换掉,接着找整数和带小数的整数

目录
打赏
0
0
0
0
91
分享
相关文章
C++ 整数转字符串
C++ 整数转字符串
122 0
已知一个整数,如何判断这个整数是无符号的?
已知一个整数,如何判断这个整数是无符号的?
107 0
062.浮点数转换为字符串
062.浮点数转换为字符串
137 0
整数和浮点数的表示方法
第一次写博客,没什么经验,会保持更新的,文章也会不断优化的,请大家多多指教 整数表示 现代计算机存储和处理的信息以二值表示,也即是只包含0和一的二进制数字,其中整数表示的方法分为有符号整数、无符号整数。
1279 0
为什么不能使用"=="运算符判断两个浮点数是否相等
对于大多数员程序来说,浮点数是相当冷门的知识,但这是一个很有意思的话题。本文从一个简单的相等比较操作分析了计算过程对浮点数精度的影响并给出了在编程实践中完全禁止使用"=="运算符去判断两个浮点数是否相等的结论。
5052 0
LeetCode 1317. 将整数转换为两个无零整数的和
LeetCode 1317. 将整数转换为两个无零整数的和
取一个整数a从右端开始的4~7位。
取一个整数a从右端开始的4~7位。
47 1
|
4月前
取一个整数a从右端开始的 4~7 位
取一个整数a从右端开始的 4~7 位。
28 7
|
9月前
63.取一个整数a从右端开始的4~7位。
63.取一个整数a从右端开始的4~7位。
50 0

热门文章

最新文章

AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等