Skip to content

Latest commit

 

History

History
64 lines (36 loc) · 1.45 KB

102.md

File metadata and controls

64 lines (36 loc) · 1.45 KB
@author jackzhenguo
@desc 
@date 2019/9/9

102 使用正则判断是否为正浮点数

从一系列字符串中,挑选出所有正浮点数。

该怎么办?

玩玩正则表达式,用正则搞它!

关键是,正则表达式该怎么写呢?

有了!

^[1-9]\d*\.\d*$

^ 表示字符串开始

[1-9] 表示数字1,2,3,4,5,6,7,8,9

^[1-9] 连起来表示以数字 1-9 作为开头

\d 表示一位 0-9 的数字

* 表示前一位字符出现 0 次,1 次或多次

\d* 表示数字出现 0 次,1 次或多次

\. 表示小数点

\$ 表示字符串以前一位的字符结束

^[1-9]\d*\.\d*$ 连起来就求出所有大于 1.0 的正浮点数。

那 0.0 到 1.0 之间的正浮点数,怎么求,干嘛不直接汇总到上面的正则表达式中呢?

这样写不行吗:^[0-9]\d*\.\d*$

In [85]: import re

In [87]: recom = re.compile(r'^[0-9]\d*\.\d*$')

In [88]: recom.match('000.2')
Out[88]: <re.Match object; span=(0, 5), match='000.2'>

结果显示,正则表达式 ^[0-9]\d*\.\d*$ 竟然匹配到 000.2 ,认为它是一个正浮点数。

所以知道为啥要先匹配大于 1.0 的浮点数了吧!

如果能写出这个正则表达式,再写另一部分就不困难了!

0.0 到 1.0 间的浮点数:^0\.\d*[1-9]\d*$

两个式子连接起来就是最终的结果:

^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$

[上一个例子](101.md) [下一个例子](103.md)