美文网首页
Day-18正则表达式2

Day-18正则表达式2

作者: 水果坚果燕麦片 | 来源:发表于2019-01-16 10:10 被阅读0次
    import re,json
    
    class Person(object):
        pass
    
    
    def main():
        re_str = r'(\d\d)\.[a-z]{2,3}'
        re_str2 = r'\d\d\.[a-z]{2,3}'
        re_str3 = r'(\d\d)\.([a-z]{2,3})'
        result = re.findall(re_str,'12.ad=l[q23.sd')
        result2 = re.findall(re_str2, '12.ad=l[q23.sd')
        result3 = re.findall(re_str3, '12.ad=l[q23.sd')
        print(result)
        print(result2)
        print(result3)
    
    
        # json数据处理
        with open('data.txt',encoding='utf-8') as f:
            dict1 = json.load(f)
            for dict2 in dict1['data']:
                print(dict2['name'])
    
        # 如果用贪婪就会取到下一个name之前对,匹配很多无关信息    
        names = re.findall(r'"name":"(.*?)",',f.read())
    
    if __name__ == '__main__':
        main()
    结果如下:
    ['12', '23']
    ['12.ad', '23.sd']
    [('12', 'ad'), ('23', 'sd')]
    
    #什么是非贪婪:在正则表达中匹配不正确次数对符号后边可以加?来表示尽可能少对匹配
    # *  +  ?  {}   后面均可以加问号在能匹配对前提下匹配尽可能少
    # 非贪婪尽可能多的匹配
    import re
    
    
    def main():
        # 1. complie()将正则表达式转换为正则对象
        # 编译后直接通过对象调用相关方法
        re_object = re.compile(r'(\d{3})=(\d{2})')
        print(re_object)
        result = re_object.fullmatch('432=12')
        print(result)
    
        # 2. fullmatch(正则表达式,字符串)
        # 用正则表达式和字符串去完全匹配,匹配成功返回匹配对象,匹配失败返回None
        # 应用:检测字符串内容是否符合要求,例如:检测帐号,密码,手机号,身份证等是否合法
        # 匹配对象
        # 1.span - 匹配到对字符串在原字符串中的下表范围
        print(result.span()) #获取整个正则表达式匹配到的内容的范围
        start, end = result.span()
        print(start, end)
        print(result.start(), result.end())
        # span里面对参数用于取group
    
        # 3. - 获取匹配到的字符串,group中可以填写的参数为分组
        print(result.group())
        print(result.groups())
        print(result.group(1))
        print(result.group(2))
    
       # 4 string 获取原字符串
        print(result.string)
    
        # 5 match(正则表达式,字符串) -->让字符串对开头和正则表达式进行匹配,匹配成功返回匹配对象
        result = re.match(r'\D\d', 's3asdads')
        print(result)
    
        # 6 search(正则表达式,字符串) -> 在字符串中去匹配出一个符合正则表达式对字串,匹配成功结果是对象,否则是None
        print(re.search(r'[\u4300-\u9fa5]{3}', 'sadj额额lll你好吗..'))
    
        # match 从头开始匹配
        def sxc_match(re_str, str1):
            re_str = '^'+re_str
            return re.search(re_str,str1)
    
        print(sxc_match(r'\d\d','86asdasd'))
    
        # 7.split(正则表达式,字符串)
        # 字符串按照固定对单个切取
        result = 'adasdasd1dasdffa'.split('s')
        print(result)
        # 将字符串按照正则表达式进行切割,返回对一个列表
        print(re.split(r'\d+','asd112312asda2131asda'))
    
        # sub(正则表达式,新子串,原字符串) 将原字符串中能够和正则表达式匹配的子串匹配的替换成新子串
        print(re.sub(r'傻[比逼]|[草操]','*','我操你是傻逼吗?'))
    
        # findall(正则表达式, 字符串) 在字符串中获取满足正则表达式的所有的子串
        # 注意:如果正正则表达式中有分组,直接获取到是分组中匹配的内容
        print(re.findall(r'\d+[a-z]','asdasdsadafsa12asd13asd'))
        print(re.findall(r'(\d+)[a-z]', 'asdasdsadafsa12asd13asd'))
        # 返回元祖
        print(re.findall(r'(\d+)([a-z])', 'asdasdsadafsa12asd13asd'))
    
        # finditer(正则表达式,字符串) - 在字符串中获取满足正则表达式的所有子串(结果是迭代器)
        # findall有分组只能取分组里面的
        result = re.finditer(r'(\d+)[a-z]', 'asdasdk123askdas122ad')
        print(result)
        print(next(result).group())
    
        # re.I 忽略大小写
        print(re.fullmatch(r'[a-z]{2}','JA',re.I))
    if __name__ == '__main__':
        main()
    结果如下
    re.compile('(\\d{3})=(\\d{2})')
    <_sre.SRE_Match object; span=(0, 6), match='432=12'>
    (0, 6)
    0 6
    0 6
    432=12
    ('432', '12')
    432
    12
    432=12
    <_sre.SRE_Match object; span=(0, 2), match='s3'>
    <_sre.SRE_Match object; span=(9, 12), match='你好吗'>
    <_sre.SRE_Match object; span=(0, 2), match='86'>
    ['ada', 'da', 'd1da', 'dffa']
    ['asd', 'asda', 'asda']
    我*你是*吗?
    ['12a', '13a']
    ['12', '13']
    [('12', 'a'), ('13', 'a')]
    <callable_iterator object at 0x7fb01a3deba8>
    123a
    <_sre.SRE_Match object; span=(0, 2), match='JA'>
    
    
    

    pygame游戏基本框架的创建

    import pygame
    
    def base_game():
        pygame.init()
    
        #2 创建游戏窗口
        #set_mode(窗口大小) == set_mode((宽,高))
        window = pygame.display.set_mode((400,600))
        pygame.display.set_caption('lost castle')
    
        # 颜色是一个元组,元组有三个int类型元素,返回0-255
        window.fill((200,230,255,1))
    
        pygame.display.flip()
        #3 让游戏保持运行状态(游戏循环)
        while True:
            # 不断检测游戏过程中是否有事件的产生
            for event in pygame.event.get():
                # 只有当事件产生后才会进入for循环
                if event.type == pygame.QUIT:
                    exit()
    
    def main():
        base_game()
    
    
    if __name__ == '__main__':
        main()
    
    

    pygame中图片的显示

    import pygame
    
    def main():
        pygame.init()
    
        window = pygame.display.set_mode((700,1243))
        pygame.display.set_caption('picture')
        window.fill((255,255,255))
    
    
        # 显示图片 1.加载图片
        # image.load(图片地址) ->返回图片对象surface
        image = pygame.image.load('images/001.jpg')
    
        # 2 加图片添加到窗口上
        # blit(image,(0, 0))
        window.blit(image,(0,0))
    
        # 1.获取图片大小
        print(window.get_size())
        print(image.get_size())
    
        # 2.图片的形变,返回一个缩放后对新对象
        # transform.scale
        # transform.rotozoom(surface,angle,scale)
        new_image = pygame.transform.scale(image,(170,300))
        new_image2 = pygame.transform.rotozoom(image,45,0.4)
    
        window.blit(new_image2, (0, 0))
    
    
    
        pygame.display.flip()
    
        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit()
    
    
    if __name__ == '__main__':
        main()
    

    字体的显示

    import pygame
    
    def base_game():
        pygame.init()
    
        #2 创建游戏窗口
        #set_mode(窗口大小) == set_mode((宽,高))
        window = pygame.display.set_mode((400,600))
        pygame.display.set_caption('lost castle')
    
        # 颜色是一个元组,元组有三个int类型元素,返回0-255
        window.fill((0,0,0,1))
    
        # 创建大小
    
        # 系统字体
        font = pygame.font.SysFont('Times',20)
        # 自定义字体
        # Font(字体文件路径,字体大小)
        font2 = pygame.font.Font('images/font2.ttf',40)
    
        # render(文字,True,文字颜色) - 返回一个文字对象(surface)
        text = font2.render('hello 世界',True, (255,255,255))
    
        window.blit(text, (50,50))
    
        pygame.display.flip()
        #3 让游戏保持运行状态(游戏循环)
        while True:
            # 不断检测游戏过程中是否有事件的产生
            for event in pygame.event.get():
                # 只有当事件产生后才会进入for循环
                if event.type == pygame.QUIT:
                    exit()
    def main():
        base_game()
    
    
    if __name__ == '__main__':
        main()
    

    图形

    import pygame,math
    
    def base_game():
        pygame.init()
        window = pygame.display.set_mode((400,600))
        pygame.display.set_caption('lost castle')
        window.fill((255,255,255,1))
        # surface,颜色,点列表,
        pygame.draw.line(window,(0,255,0),(10,10),(400,400),4)
        point_list = [(100,0),(41,181),(195,69),(5,69),(159,181)]
        pygame.draw.lines(window,(0,0,0),True,point_list)
    
        pygame.draw.circle(window,(0,0,0),(200,300),100,0)
    
        # pygame.polygan()多边形
    
        pygame.draw.arc(window,(0,255,255),(100,470,50,200),math.pi/4,math.pi/4*3,5)
    
        window.fill((255, 255, 255, 1))
        pygame.display.flip()
        #3 让游戏保持运行状态(游戏循环)
        while True:
            for event in pygame.event.get():
                if event.type == pygame.QUIT:
                    exit()
    
                if event.type == pygame.MOUSEBUTTONDOWN:
                    point_list = []
                elif event.type == pygame.MOUSEBUTTONUP:
                    if len(point_list) < 1:
                        break
                    pygame.draw.lines(window,True,(255,255,0),point_list,3)
                    pygame.display.flip()
                elif event.type == pygame.MOUSEMOTION:
                    point_list.append(event.pos)
    
    
    
    def main():
        base_game()
    
    
    if __name__ == '__main__':
        main()
    

    Pygame

    Pygame有很多的模块,不同的模块专注于不同的功能:

    模块名 功能
    pygame.cdrom 访问光驱
    pygame.cursors 加载光标
    pygame.display 访问显示设备
    pygame.draw 绘制形状、线和点
    pygame.event 管理事件
    pygame.font 使用字体
    pygame.image 加载和存储图片
    pygame.joystick 使用游戏手柄或者 类似的东西
    pygame.key 读取键盘按键
    pygame.mixer 声音
    pygame.mouse 鼠标
    pygame.movie 播放视频
    pygame.music 播放音频
    pygame.overlay 访问高级视频叠加
    pygame.rect 管理矩形区域
    pygame.sndarray 操作声音数据
    pygame.sprite 操作移动图像
    pygame.surface 管理图像和屏幕
    pygame.surfarray 管理点阵图像数据
    pygame.time 管理时间和帧信息
    pygame.transform 缩放和移动图像

    disolay模块

    下面主要介绍一下display模块的一些常用方法:

    1.set_model 生成windows窗口
    pygame.display.set_model(resolution, flags, depth)  
    

    resolution:可以控制生成的window的大小。传的值:(100,200)这样的
    flags:控制你想要怎样的显示屏,可以赋一下几个全局常量。(这些常量在pygame.locals模块中)

    FULLSCREEN 控制全屏,0或者1来控制
    HWSURFACE 控制是否进行硬件加速
    RESIZABLE 控制窗口是否可以调节大小
    NOFRAME 创建一个没有边框的窗口

    depth:不推荐设置

    2.get_caption()获得窗口的标题
    pygame.display.get_caption()  
    
    3.set_caption(title)设置窗口的标题
    pygame.display.set_caption(title)  
    

    事件

    事件 产生途径 参数
    QUIT 用户按下关闭按钮 none
    ATIVEEVENT Pygame被激活或者隐藏 gain, state
    KEYDOWN 键盘被按下 unicode, key, mod
    KEYUP 键盘被放开 key, mod
    MOUSEMOTION 鼠标移动 pos, rel, buttons
    MOUSEBUTTONDOWN 鼠标按下 pos, button
    MOUSEBUTTONUP 鼠标放开 pos, button
    USEREVENT 触发了一个用户事件 code

    相关文章

      网友评论

          本文标题:Day-18正则表达式2

          本文链接:https://www.haomeiwen.com/subject/yyupdqtx.html