zoukankan      html  css  js  c++  java
  • re模块,三级菜单,计算器(待完善)

    #!/usr/bin/env python
    # -*- coding:utf-8 -*-

    import re

    # 1、匹配一篇英文文章的标题 类似 The Voice Of China
    '''
    s = r'(?:[A-Z][a-z]+ ?)+'
    ret = re.findall(s, 'The Voice Of China Of China')
    print(ret)
    '''

    # 2、匹配一个网址
    # 类似 https://www.baidu.com http://www.cnblogs.com
    '''
    s = r'https?://www.[A-Za-z]+.com'
    ret = re.findall(s, 'https://www.baidu.com http://www.cnblogs.com')
    print(ret)
    '''

    # 3、匹配年月日日期 类似 2018-12-06 2018/12/06 2018.12.06
    '''
    s = r'-?d{1,4}(-|/|.)((0[1-9])|(1[0-2]))1((0[1-9])|(1[0-9])|(2[0-9])|(3[0-1]))'
    ret = re.findall(s, '2018-12-06')
    print(ret)
    '''

    # 4、匹配15位或者18位身份证号
    '''
    (d{6}(19|20)dd(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[01])ddd(d|x))+|(d{8}(0[1-9]|1[0-2])(0[1-9]|1[0-9]|2[0-9]|3[01])d{3})
    '''

    # 5、从lianjia.html中匹配出标题,户型和面积,结果如下:
    # [('金台路交通部部委楼南北大三居带客厅 单位自持物业', '3室1厅', '91.22平米'), ('西山枫林 高楼层南向两居 户型方正 采光好',
    # '2室1厅', '94.14平米')]
    '''
    import re


    pattern = '<div class="info clear">.*?data-sl="">(?P<title>.*?)</a>.*?<span class="divide">/</span>(?P<size>.*?)'
    '<span class="divide">/</span>(?P<m2>.*?)<span class="divide">'
    with open(r'D:homeworkday261', 'r', encoding='utf-8')as f:
    s = f.read()
    ret = re.findall(pattern, s, re.S)
    print(ret)
    '''

    # 6、1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))
    # 从上面算式中匹配出最内层小括号以及小括号内的表达式
    '''
    ([^()]+)
    '''

    # 7、从类似9-2*5/3+7/3*99/4*2998+10*568/14的表达式中匹配出乘法或除法
    '''
    d+((*|/)d+)+
    '''

    # 8、通读博客,完成三级菜单
    # http://www.cnblogs.com/Eva-J/articles/7205734.html
    '''
    menu = {
    '北京': {
    '海淀': {
    '五道口': {
    'soho': {},
    '网易': {},
    'google': {}
    },
    '中关村': {
    '爱奇艺': {},
    '汽车之家': {},
    'youku': {},
    },
    '上地': {
    '百度': {},
    },
    },
    '昌平': {
    '沙河': {
    '老男孩': {},
    '北航': {},
    },
    '天通苑': {},
    '回龙观': {},
    },
    '朝阳': {},
    '东城': {},
    },
    '上海': {
    '闵行': {
    "人民广场": {
    '炸鸡店': {}
    }
    },
    '闸北': {
    '火车战': {
    '携程': {}
    }
    },
    '浦东': {},
    },
    '山东': {},
    }

    lst = [menu]
    while True:
    for i in lst[-1]:
    print(i)
    user = input('请选择:')
    if user.upper() == 'B':
    lst.pop()
    elif user.upper() == 'Q':
    break
    elif lst[-1].get(user):
    lst.append(lst[-1][user])
    print('已结束')
    '''

    # 9、大作业:计算器
    # 1)如何匹配最内层括号内的表达式
    '''
    (([^()]+))
    '''

    # 2)如何匹配乘除法
    '''
    d+((*|/)d+)+
    '''

    # 3)考虑整数和小数
    '''
    (d+.?d+)|d+
    '''

    # 4)写函数,计算‘2*3’,‘10/5’
    '''
    import re


    def count(suanshi):
    a, b, c = re.split(r'([*/])', suanshi, )
    a = int(a)
    c = int(c)
    if b == '*':
    print(a*c)
    elif b == '/':
    print(a/c)


    count('10/5')
    '''

    # 5)引用4)中写好的函数,完成'2*3/4'计算
    '''
    import re


    def count(suanshi):
    try:
    while 1:
    x = re.search(r'd+[*/]d+', suanshi)
    a, b, c = re.split(r'([*/])', x.group())
    a = int(a)
    c = int(c)
    if b == '*':
    res = a * c
    elif b == '/':
    res = int(a / c)
    suanshi = suanshi.replace(x.group(), str(res), 1)
    print(suanshi)
    except Exception as e:
    print('ok')


    count('2*3*46*3*43*43/43*43/4*53*3')
    '''
  • 相关阅读:
    Python 通过最低位判断数字是偶数还是奇数
    C语言 windows下Ansi和UTF-8编码格式的转换
    C语言 Ubuntu系统 UTF-8 文字处理
    C语言 使用char字符实现汉字处理
    C# GUI应用 实现 2048游戏
    Docker部署Minio
    Ubuntu18.04开启root
    Ubuntu18.04安装Docker
    docker安装mysql
    idea启动项目端口被占用
  • 原文地址:https://www.cnblogs.com/zjx1/p/10821190.html
Copyright © 2011-2022 走看看