浮点数多种形式,包括如下:
3.6 , +3.14 , -3.14 , .7
正确匹配上述浮点数,正确姿势如下:
~
[+-]?[0-9]+.[0-9]+|\.[0-9]+
~
若有疑惑,或新手刚上路,可往下看。
该博客是用python语言写的,边学边用,通俗易懂,可以让你轻松学到:
~
r 、[…] 、 + 、 \ 、 ? 、 |
六种用法。
import re
#方便展示而写的函数
def match_float(pattern,floats):
matched=[]
failed=[]
for float in floats:
result=re.search(pattern,float)
if result!=None and result.group()==float:
matched.append(float)
else:
failed.append(float)
print('matched:',matched)
print('failed',failed)
floats=['3.6','+3.14','-3.14','.7']
pattern1= r'[0-9]+\.[0-9]+'
match_float(pattern1,floats)
output:
matched: ['3.6']
failed ['+3.14', '-3.14', '.7']
小数形式诸如: **.** ,匹配的正确姿势为:
~
r’[0-9]+.[0-9]+’
解释:
\. 的含义 :诸如’ . * ? ’ 等等,在正则表达式中是有特殊含义的。若想匹配其原字符,即匹配 ’ . * ? ’ 本身,则需要在其前加上 ’ \ ‘,即:’ \. ’ ’ \* ‘
r 的用途 :为了让’ \ ‘能够表达其作用,则必须在正则表达式(字符串)前加上 ’ r ‘
[0-9] 的含义 :[…] 表示只匹配中括号里的一个字符,[0-9] 即匹配0~9中的一个数字,等价于[0123456789],’df2’匹配2,’df22’匹配2,2,即俩次
+ 的含义 :+ 表示匹配前一个字符一次或则多次以上,故 ’ [0-9]+ ‘从 ‘22.123’ 中匹配 ‘22’ , ‘123’
若匹配 ‘+’ 则用 ‘\+’ 表达式,而不是 ‘+’,因为 ‘+’ 有其特殊含义
? 的含义: 匹配带有 ‘+’ 的小数同时,也要匹配不带 ‘+’ 的小数,则用 ‘?’,表示匹配0次或者1次
故:
pattern2= r'\+?[0-9]+\.[0-9]+'
match_float(pattern2,floats)
output:
matched: ['3.6', '+3.14']
failed ['-3.14', '.7']
那 ‘+’ ‘-’ 号都要匹配呢?聪明的童鞋很容易解锁了新姿势:
~
r’[+-]?[0-9]+\.[0-9]+’
pattern3= r'[+-]?[0-9]+\.[0-9]+'
match_float(pattern3,floats)
output:
matched: ['3.6', '+3.14', '-3.14']
failed ['.7']
有些浮点数形式可能是这样的:.7 , .123 ,省略了前面的0,那又如何匹配?正确的姿势如下:
~
r’[+-]?[0-9]+.[0-9]+|\.[0-9]+’
| 的含义:正则表达式诸如 ‘a|b’ 若用 a 匹配不成功,则尝试用 b 去匹配
要注意 | 是怎么分割的,’[+-]?[0-9]+.[0-9]+|.[0-9]+’ 是分成’[+-]?[0-9]+.[0-9]+’ 和 ‘.[0-9]+’
pattern4= r'[+-]?[0-9]+\.[0-9]+|\.[0-9]+'
match_float(pattern4,floats)
output:
matched: ['3.6', '+3.14', '-3.14', '.7']
failed []
附上精彩的菜鸟教程:
正则基础:http://www.runoob.com/regexp/regexp-tutorial.html
python下的正则:http://www.runoob.com/python/python-reg-expressions.html
谢谢大家的浏览,
希望我的努力能帮助到您,
共勉!