这是菜鸟学python的第47篇原创文章 阅读本文大概需要5分钟 前面讲了很多正则表达式的知识,上一篇也实战操作了一个关于字符串和时间处理的例子,很多同学觉得不过瘾,今天我们讲一个稍微复杂一点,并且是一个完整的实际应用的例子,温度转换小程序 需求:写一个小程序来获取用户的输入 若输入的摄氏温度就转换成华氏温度 若输入的华氏温度就转换成摄氏温度 这个程序比较有趣而且容易上手,那么如何用正则来处理呢,下面我们由浅入深来分析一下这个问题 1).我们先假设用户输入的都是整数温度(先从最简单的入手吧) 2).比如用户输入的是1位或者2位的整数 3).若正确就转换一下温度 >> 22 Your input celsius temperature :22 match temperature :22 fahrenheit temperature :71 1).所以在正则的判断上要改一下,而且要用浮点数 2).注意同时还要能继续匹配不带小数的情况 若输入带3位小数的温度 >> 22.223 match temperature :22.22 71.996 若输入1位整数的温度 >> 9 match temperature :9 48.2 我们继续分析改代码 1).温度有零上也有零下,可以在前面加+表示零上,-表示零下 2).温度也为0度的时候,所以第一个数字匹配从[0-9] >> -12 Your input celsius temperature :-12 temperature:-12 fahrenheit temperature :10.4 识别用户输入的是摄氏还是华氏温度,要用户结尾加C或F区分 1),先分析出用户输入的C/F,比如 celsius='-9.5C' patt=re.compile(r'[-+]?[0-9][0-9]?(\.[0-9][0-9]?)?([CF])') 我们在上面的正则的最后加一段[CF]表示输入的可以是C也可以是F 2),我们要把[CF]用括号括起来,然后用groups()来获取,用来做温度类型判断 同时也要把[-+]?[0-9][0-9]?(\.[0-9][0-9]?)?括起来,因为要取前面的温度数字 celsius='-9.5C' patt=re.compile(r'([-+]?[0-9][0-9]?(\.[0-9][0-9]?)?)([CF])') m=re.search(patt,celsius) if m: print m.groups() print m.groups()[-1] >> ('-9.5', '.5', 'C') 也就是说我们可以根据元组的最后一个元素来判断到底是C还是F,第一个元素来得到温度数值 3).问题来了,'-9.5'里面的'-'怎么办,温度转换需要数字啊,不急很简单 有万能的eval函数 celsius='-9.5C' patt=re.compile(r'([-+]?[0-9][0-9]?(\.[0-9][0-9]?)?)([CF])') m=re.search(patt,celsius) if m: print m.groups() print m.groups()[-1] temp_str=m.groups()[0] print eval(temp_str) >> ('-9.5', '.5', 'C') C -9.5 好经过前面的4步已经万事俱备了,可以完成代码了 1).我们只需要在前面的基础上把用户输入的温度,分成数字和温度类型 2).若是摄氏温度: 计算一下转成华氏温度 fahrenheit=(float(temperature)*9/5)+32 3).若是华氏温度: 计算一下转成摄氏温度 celsius=(float(temperature)-32)*5/9
好了Python中的正则表达式实战进阶就讲到这里啦,希望能给初学者一些启发,若有什么不懂的,也可以留言跟我探讨交流. 最后说一下,原创真的不易,欢迎转发转发转发,留言留言留言,重要的事情说三遍,也是对我的一点鼓励和动力. 来源 | 菜鸟学Python |
|
来自: Four兄 > 《Python笔记》