Day-18正则表达式2

2019-01-16  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读