贪婪
什么是非贪婪:在正则中控制匹配不确定次数的符号后面加问号来表示尽可能少的匹配
在贪婪的时候,匹配是尽可能多的匹配
注意;尽可能少是在能够匹配的前提下尽可能少
?
{m,}
{m,n}
{,n}
def main():
re_str=r'\d+'
print(re.search(r'\d+?','asdasdasdas1234asd')) # <_sre.SRE_Match object; span=(11, 12), match='1'>
re模块
函数 | 用法 | 功能 |
---|---|---|
1.compile | compile(正则表达式) | 将正则表达式转换成正则对象 |
2.fullmatch | fullmatch(正则表达式,字符串) | 让正则表达式去完全匹配字符串 |
3.match | match(正则,字符串) | 让正则去匹配字符串开头 |
4.serch | serch(正则,字符串) | 匹配字符串第一个符合正则的子串 |
5.split | split(正则,字符串) | 让满足正则的字符去分割字符串,返回一个列表 |
6.sub | sub(正则,字符串1,字符串2) | 用字符串1去替换字符串2中满足正则字符串 |
7.findall | findall(正则,字符串) | 去字符串中寻找符合正则的子串,返回一个列表 |
8.finditer | finditer(正则,字符串) | 去字符串中寻找满足正则的子串,返回一个迭代器 |
# 匹配对象
# 1).span() - 匹配到的字符串在原字符串中的下标范围(结果是元素)
result = re.fullmatch(r'(\d{3})=([a-z]+)', '342=sjaks')
print('====span====')
print(result.span()) # (0,9)获取整个正则表达式匹配到的内容的范围
# start, end = result.span()
# print(start, end)
result = re.fullmatch(r'(\d{3})=([a-z]+)', '342=sjaks')
print(result.span(1)) # (0,3)获取正则表达式中第一个分组匹配到的内容的范围
print(result.span(2)) # (4,9)获取正则表达式中第二个分组匹配到的内容的范围
# 2). start()和end() - 匹配到的字符串在原字符串中的开始下标和结束下标
print('====start名,end====')
result = re.fullmatch(r'(\d{3})=([a-z]+)', '342=sjaks')
print(result.start(), result.end()) # 0 9
print(result.start(1), result.start(2))#0 4
# 3). group() - 获取匹配到的字符串(结果是字符串)
result = re.fullmatch(r'(\d{3})=([a-z]+)', '342=sjaks')
print(result.group()) # 获取整个正则匹配到的字符串
print(result.group(1)) # 获取第一个分组匹配到的字符串
print(result.group(2)) # 获取第二个分组匹配到的字符串
print(result.groups()) # 同时获取所有分组匹配到的字符串(结果是元祖)
# 4). string - 获取原字符串
print(result.string)
1.compile(正则表达式) -- 将正则表达式转换成正则对象
编译后可以直接通过对象调用相关方法
re_object=re.compile(r'\d{3}')
print(re_object) #re.compile('\\d{3}')
2.fullmatch(正则表达式,字符串) -->让正则去和字符串匹配,看是否能够完全匹配,
匹配成功返回匹配对象,失败返回None
应用,检测字符串内容是否符合要求
匹配对象
span -- 匹配到的字符串在原字符串中的位置信息,返回的是元祖
start
result=re.fullmatch(r'(\d{3})=([a-z]+)','123=asdsdffg')
print(result)
start,end=result.span()# 获取整个正则表达式匹配到的内容的范围
# print(result.span()) # (0, 12)
# print(start,end) # 0 12
print(result.start(),result.end()) # 0 12
print(result.span(1)) # 匹配结果的第一个分组的下标范围
print(result.span(2)) # 匹配结果的第二个分组的下标范围
print(result.start(1)) #匹配到的第一个分组的开始下标
print(result.start(2)) #匹配到的第二个分组的开始下标
group -- 获取匹配到的字符串(结果是字符串)
print(result.group()) #获取整个正则匹配到的字符串
print(result.group(1)) #123 获取第一个分组匹配到的字符串
print(result.group(2)) #asdsdffg 获取第二个分组匹配到的字符串
print(result.groups()) # ('123', 'asdsdffg')同时获取所有分组匹配到的字符串 ,返回一个元祖
string - 获取匹配到的原字符串
print(result.string) #123=asdsdffg
3.match(正则表达式,字符串) -> 让字符串的开头和正则表达式进行匹配,匹配成功结果是匹配对象,否则是None
print(re.match(r'\D\d', 's3skjkjks')) #s3
4.search(正则表达式,字符串) -> 在字符串中去匹配出第一个符合正则表达式的子串, 匹配成功结果是匹配对象,否则是None
print(re.search(r'[\u4e00-\u9fa5]{3}', 'hsj后视ss023你好吗,skss上的30s')) #你好吗
5.split(正则表达式,字符串) -> 将字符串按照满足正则要求的子串进行切割(返回值是列表)
['asj','jkas','kjsj','kajs','==asdfj','jkkss']
# 6.sub(正则表达式,字符串1, 字符串2) -> 将字符串2中能够和正则表达式匹配的子串替换成字符串1,产生一个新的字符串
print(re.sub(r'\d+', '*', 'jsj93jksj93j5a45s3s是看得见'))
print(re.sub(r'傻逼|[傻艹草操]', '*', '你是傻逼吗?艹!'))
# 7.findall(正则表达式, 字符串) -> 在字符串中获取满足正则表达式的所有的子串(结果是列表)
# 注意: 如果正则表达式中有分组,直接获取到的是分组中匹配到的内容; 如果有多个分组列表中的元素是元祖
print(re.findall(r'\d+[a-z]', 'sjh83bkss93ksjhf9922'))
print(re.findall(r'(\d+)[a-z]', 'sjh83bkss93=sjhf9922'))
print(re.findall(r'abc(\d{2}|[A-Z]{2})', '=-aaabc73kkjabcKJL=3'))
# 8.finditer(正则表达式, 字符串) -> 在字符串中获取满足正则表达式的所有的子串(结果是迭代器,元素是匹配对象)
result = re.finditer(r'(\d+)[a-z]', 'sj8khk83jks数据310sj=sd')
print(result)
print(next(result).group())#8k
# 9.re.I -> 忽略大小写
# 匹配的约束条件是放在函数的flags参数中的
print(re.fullmatch(r'[a-z]{2}', 'SA', re.I))
pygame
最小游戏程序
内容 | 代码 |
---|---|
初始化游戏 | pygame.init() |
创建游戏窗口 | windom=pygame.display.set_mode((窗口大小)) |
设置窗口标题 | pygame.display.set_caption('窗口名') |
设置窗口颜色 | windom.fill(255,0,0) |
将窗口显示出来 | pygame.display.filp() |
让游戏一直开启 | while True: |
检测是否有事件发生 | for event in pygame.event.get(): |
—— | if event.type==QUIT |
退出 | exit() |
显示图片
内容 | 代码 |
---|---|
加载图片 | image1=image.load(图片路径) |
将图片显示出来 | windom.blit(图片对象,坐标) |
操作图片
1.获取图片大小
2.图片缩放和旋转(形变)
image.get_size()
transform.scale(缩放对象, 目标大小) -> 返回缩放后的新对象 transform.rotozoom(缩放对象, 旋转角度, 缩放比例)
显示文字
1.创建字体对象
a.系统字体
font.SysFont(字体名, 字体大小) - 返回一个字体对象
b.自定义字体
font.Font(字体文件路径, 字体大小)
font = pygame.font.SysFont('Times', 40)
font = pygame.font.Font('images/font2.ttf', 40)
2.根据字体创建文字对象
render(文字, True, 文字颜色) - 返回一个文字对象(Surface)
text = font.render('hello世界!', True, (255, 0, 0))
w, h = text.get_size()
3.显示文字
blit(渲染对象, 坐标)
window.blit(text, (400-w, 600-h))