@author jackzhenguo
@desc
@date 2019/9/9
从一系列字符串中,挑选出所有正浮点数。
该怎么办?
玩玩正则表达式,用正则搞它!
关键是,正则表达式该怎么写呢?
有了!
^[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*$