2.3 - 正则练习题

1.验证手机号是否合法

import re

'''验证手机号是否合法'''
'''
* 手机号码
* 移动:134,135,136,137,138,139,150,151,157,158,159,182,187,188
* 联通:130,131,132,152,155,156,185,186
* 电信:133,134,153,180,189
147...  176...
'''
# phone_num = '13789481229'
phone_num = input('phone>>>:')
# pattern = re.compile('^0\d{2,3}\d{7,8}$|^1[358]\d{9}$|^147\d{8}')
pattern = re.compile('^1[34578]\d{9}')
phone_match = pattern.fullmatch(phone_num)
if phone_match:
    print(phone_match.group())
else:
    print('\033[1;31mphone is error\033[0m')

2.验证邮箱是否合法

import re

# email = 'alice@163.com'
email = input('email>>>:')
# pattern = re.compile('\w+@\w+\.(com|cn)')
pattern = re.compile('[-_\w]+@[-_\w]+\.(com|cn|edu)')
email_match = pattern.fullmatch(email)
if email_match:
    print(email_match.group())
else:
    print('\033[1;31memail is error\033[0m') 

#re.match("^.+\\@(\\[?)[a-zA-Z0-9\\-\\.]+\\.([a-zA-Z]{2,3}|[0-9]{1,3})(\\]?)$", email) 

3.开发一个简单的python计算器,实现加减乘除及拓号优先级解析

用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式(不能调用eval等类似功能偷懒实现),运算后得出结果,结果必须与真实的计算器所得出的结果一致

re.search(r'\([^()]+\)',s).group()#可拿到最里层的括号中的值

'(-40/5)'

 1 #匹配整数或小数的乘除法,包括了开头存在减号的情况
 2 mul_div=re.compile("(-?\d+)(\.\d+)?(\*|/)(-?\d+)(\.\d+)?")
 3 #匹配整数或小数的加减法,包括了开头存在减号的情况
 4 plus_minus = re.compile("(-?\d+)(\.\d+)?(-|\+)(-?\d+)(\.\d+)?")
 5 #匹配括号
 6 bracket=re.compile("\([^()]*\)")
 7 #匹配乘法的时候出现乘以负数的情况,包括了开头存在减号的情况
 8 mul_minus_minus = re.compile("(-?\d+)(\.\d+)?(\*-)(\d+)(\.\d+)?")
 9 #匹配除法的时候出现乘以负数的情况,包括了开头存在减号的情况
10 div_minus_minus = re.compile("(-?\d+)(\.\d+)?(/-)(\d+)(\.\d+)?") 

参考:http://www.bubuko.com/infodetail-1729967.html 
posted @ 2018-02-28 09:08  Alice的小屋  阅读(224)  评论(0编辑  收藏  举报