python扩展正则表达式与装饰器以及一些使用细节

# -*- coding: utf-8 -*-
import requests
import time as st
import functools
import re
'''编写测时装饰器'''
def measure_time(func):
    @functools.wraps(func)
    def measure(*args, **kwargs):
        starttime = st.time()
        result = func(*args, **kwargs)
        endtime = st.time()
        print("function %s consume %ds" % (func.__name__, endtime-starttime))
        return result
    return measure
    
'''递归思想与数学归纳法'''
#汉诺塔问题

@measure_time
def move(dish, begin, stop, destination):
    if dish == 1:
        print("move dish from %s to %s" % (begin, destination))
    else:
        move(dish-1, begin, destination, stop)
        print("move dish from %s to %s" % (begin, destination))
        move(dish-1, stop, begin, destination)

#归并排序问题
@measure_time
def split(in_list):
    if len(in_list) <= 1:
        return in_list
    
    mid = len(in_list) // 2  #python3使用// python2使用/
    left = split(in_list[:mid])
    right = split(in_list[mid:])
    #return merge(left, right)
    return merge(left, right)
def merge(left, right):
    result = []
    i = 0
    j = 0
    while i < len(left) and j < len(right):
        if left[i] <= right[j]:
            result.append(left[i])
            i += 1
        else:
            result.append(right[j])
            j += 1            
    result += left[i:]
    result += right[j:]
    return result
        
    
if __name__ == "__main__":
    move(3, 'A', 'B', 'C')
    #对字典切片
    in_dict = {1:'1',2:'2',3:'3',4:'4',5:'5',6:'6',7:'7'}
    
    #通过value返回keys
    print(list(in_dict.keys())[list(in_dict.values()).index("7")])

    #print(split([10, 67,19,9,8,7,6,1,2,5,4,3]))


    '''python中正则表达式的使用进阶'''
    '''以检索80图书馆网站,网址字符串为例'''
    '''扩展正则表达式的用法'''

    
    url = r'https://www.80xs.la/'
    headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.108 Safari/537.36'}
    html = requests.get(url, headers=headers)
    print(html.text)
    #无预搜索的正则表达式
    pattern = re.compile(r'<li><a href=.*>.*<\/li>')
    
    #使用预搜索的正则表达式,相当于if, 主要用于提取字符串中的指定字符
    #(?=...) 要是一个字符串后面是...,开始匹配这个字符串,翻译成自然语言:假设字符串之后是...则匹配
    #(?!...) 要是一个字符串后面不是...,开始匹配这个字符串,翻译成自然语言:假设字符串之后不是...则匹配
    #(?<=...) 要是一个字符串前面是...,开始匹配这个字符串, 翻译成自然语言:假设字符串之前是...则匹配
    #(?<!...) 要是一个字符串前面不是...,开始匹配这个字符串, 翻译成自然语言:假设字符串之前不是...则匹配
    '''正常re模块中的findall函数中使用(com|cn),findall函数默认会将可捕获分组以tuple数据类型输出,由于()()会创建一个分组,则输出会把com或者cn单独输出'''
    #使用(?:...) 与() 都是分组,()是捕获分组,值会被保存下来,使用$n取值.(?:...)是非捕获分组,值不会被保存下来

    patternnet = re.compile(r'(?<=<li><a href=")(?:https?:\/\/www\.\w+\.)(?:com|cn|la)(?:\/)(?:\/.*\/.*\.html)?')
    patternyu = re.compile(r'(?:https?:\/\/www\.\w+\.)(?:com|cn|la)(?:\/)(?=<\/a>)(?:.*\/.*\/.*.html)?')
    #(?P<name>...)用于为group分组命名(?(name)Y|N) 若找到name命名的分组,则执行Y,否则执行N
    patternpy = re.compile(r'(?P<dnode><li><a href=")(?(dnode)(?:(?:[https]{4,5}:\/\/www\.\w+\.))(?:com|cn|la)(?:\/))(?:\/.*\/.*.html)?')
    matcher = re.findall(patternyu, html.text)
    for i in matcher:
        print(i)
                
    

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值