210222课堂整理(异常捕获和正则)

异常捕获

1,异常:

程序运行时报错,即为异常
**后果:**程序会在异常的地方直接结束,不会继续往后执行

2,异常捕获

目的: 程序出现异常时,还可以继续执行后面的代码
**需要捕获的条件:**知道某个地方会出现异常,如代码没问题,由用户的异常操作导致,此时需要异常捕获
语法1: 捕获所有异常
try:
代码1 需要捕获异常的代码
except:
代码2 捕获异常后的补救代码
**执行过程:**先执行代码1,如无异常,不执行代码2,直接执行后面的其他代码;否则,执行代码2

try:age = int(input('输入年龄:'))
except:print('年龄输入有误')age = 0print(f'年龄是:{age}')# 练习:打开指定的文本文件,如果文件存在就读文件中的内容,如果不存在就创建这个文件。
try:with open('./aaa.txt', 'r', encoding='utf-8') as f:print(f.read())
except:print('该文件不存在!')with open('./aaa.txt', 'w', encoding='utf-8') as f:pass

语法2:捕获指定类型的异常
try:
代码段1
except 异常类型:
代码段2

说明:异常类型:在控制台显示error前面的类型

try:list1 = [10, 20, 30]print(list1[3])print({'a': 10, 'b': 20}['aa'])
except IndexError:print('出现异常')
except KeyError:print('出现异常')

语法3 同时捕获多个异常,针对不同异常进行相同处理
try:
代码段1
except (异常类型1,异常类型2)
代码段2

语法4 同时捕获多个异常,针对不同异常进行不同处理
try:
代码段1
except 异常类型1
代码段11
except 异常类型2
代码段22

3,关键字 finally

finally的存在不影响原来异常捕获的执行
finally后面的代码是不管try里面的代码发生什么情况都会执行

try:print('hello world!')# print('abc'[100])print({'a':19}['b'])
except IndexError:print('出现了异常')
finally:print('出现其他异常,留存')

正则相关符号及运用

1,正则表达式

让复杂的字符串处理变得更加简单的工具

2,正则语法

fullmatch(正则表达式,字符串)
判断指定的字符串是否满足正则表达式描述的原则,如不满足返回None
Python中正则表达式是写到单引号或双引号里面的
例如’正则表达式‘

3,匹配类符号(一个符号必须匹配一个对应的字符)

1)普通字符

正则表达式中除了特殊符号以外的符号都是普通字符
普通字符在正则中表示这个符号本身

from re import fullmatch

导入正则模块

规则:一个字符串有3个字符,且第一个是a,第二个是b,第三个是c

re_str = ‘abc’
result = fullmatch(re_str, ‘abc’)
print(result)

2) 特殊字符

包含: . \d \D \s \S [] [^]

  • . 点 匹配一个任意字符

**规则:**一个字符串有3个字符,第1个是a,最后一个是c,中间是任意字符

re_str = 'a.c'
result = fullmatch(re_str, 'a胡c')
print(result)# 练习:写一个正则能够匹配一个字符串的开头是1结尾是2,中间2个任意字符result = fullmatch('1..2', '1ab2')
print(result)
  • \d 匹配一个任意数字字符
    反斜杠前面加r,避免与转义字符冲突

**规则:**一个字符串有4个字符,第一个是a,最后一个是b,中间是任意两个字符

re_str = r'a\d\db'
result = fullmatch(re_str, 'a49b')
print(result)
  • \D 匹配任意一个非数字字符

**规则:**一个字符串有4个字符,第一个字符不是数字,后面是abc

re_str = r'\Dabc'
result = fullmatch(re_str, '=abc')
print(result)
  • \s 匹配一个任意空白字符,对应数字
    空白字符:空格 \n \t
    反斜杠前面加r,避免与转义字符冲突

**规则:**一个字符串开头是2个数字,中间1个空白,后边跟2个数字

re_str = r'\d\d\s\d\d'
result = fullmatch(re_str, '23 89')
print(result)
  • \S 匹配任意一个非空白字符

**规则:**一个字符串有5个字符,第1个是数字字符,第2个不是空白字符,后面是abc

re_str = r'\d\Sabc'
result = fullmatch(re_str, '8=abc')
print(result)
  • [字符集] 匹配字符集中任意一个字符
    注意:一个中括号[]只能匹配一个字符,
    括号里面写多少个字符就可以匹配多少个

注意:-减号在2个字符之间表示范围,-前面的字符编码值必须小于后面的编码值

​ -减号在2个字符以外,表示减号
[abc你] 能匹配’a’或者’b’或者’你’
[abc\d] 能匹配’a’或者’b’或者’任意一个数字’
[1-9] 匹配1到9中任意一个数字字符
[a-z] 匹配任意一个小写字母
[A-Z] 匹配任意一个大写字母
[A-Z\d] 匹配任意一个大写字母或者任意一个数字
[a-zA-Z] 匹配任意一个字母
[\u4e00-\u9fa5] 匹配任意一个中文

re_str = r'1[a=bc0]2'
result = fullmatch(re_str, r'102')
print(result)re_str = r'1[\dxy胡]2'
result = fullmatch(re_str, '192')
print(result)re_str = r'a[2345678]b're_str = r'a[2-8]b'  # [2-8] 2到8中间任意一个数字
result = fullmatch(re_str, r'a3b')
print(result)# 练习:写一个正则表达式匹配一个字符:123前面是一个数字、字母或者下划线re_str = r'[\da-zA-Z_]123'
result = fullmatch(re_str, '1123')
print(result)
  • [^字符 ] 匹配不在字符集中的任意一个字符

    • [^abc ] 匹配一个除了‘a’ ‘b’ 'c’以外的任意字符
    • [^a-zA-Z] 匹配任意一个非字母字符
re_str = r'[^abc]123'
result = fullmatch(re_str, 'A123')
print(result)

4,检测类符号:检测字符所在位置是否符合要求

检测类符号不影响匹配,不参与匹配

包含: \b \B ^ $

1) \b 检测是否是单词边界

单词边界包括:空白、标点符号、字符串开头或结尾 (所有可以划分出2个不同单词的符号)

from re import fullmatch, search
# 导入re模块
re_str = r'abc\b,123'
result = fullmatch(re_str, 'abc,123')
print(result)re_str = r'a\b.b'
result = fullmatch(re_str, 'a,b')
print(result)

2) \B 检测是否 非单词边界

re_str = r'a.\Bb'
result = fullmatch(re_str, 'adb')
print(result)

3) ^ 检查是否是字符串开头

需放在正则表达式前面

re_str = r'^\d\d\d'
result = fullmatch(re_str, '123')
print(result)re_str = r'^\d\d\d'                   '
result = search(re_str, '123')
print(result)re_str = r'^\d\d\d'
result = search(re_str, 'sjhs是276鲨大富豪shj345')
print(result)   # None

4) $ 检测是否是字符串结尾

需放在正则表达式后面

re_str = r'\d\d\d'
result = search(re_str, 'sjhs是276鲨大富豪shj345')
print(result)   # '276're_str = r'\d\d\d$'
result = search(re_str, 'sjhs是276鲨大富豪shj345')
print(result)   # '345'

5,正则匹配次数符号

包含: * + ? {}

1) *星号 匹配0次或多次

a* 匹配任意多个字符a
\d* 匹配任意多个\d数字字符

from re import fullmatch
# 导入re模块
re_str = r'1a*2'
result = fullmatch(re_str, '1aaa2')
print(result)re_str = r'a\d*b'
result = fullmatch(re_str, 'a123456b')
print(result)re_str = r'1[abc]*2'
result = fullmatch(re_str, '1abac2')
print(result)

2) +加号 匹配1次或多次,且加号不能匹配0次

re_str = r'1a+2'
result = fullmatch(re_str, '1aaa2')
print(result)

3) ? 问号 匹配0次或1次

re_str = r'a?\d\d'
result = fullmatch(re_str, 'a23')
print(result)# 练习:写一个正则表达式能够匹配任意整数字符串,包括:6723、+23、-2891
from re import fullmatch
re_str = '.+'
result = fullmatch(re_str, '-2891')
print(result)re_str = r'[-+]?\d+'
result = fullmatch(re_str, '-2891')
print(result)

4) {} 大括号

{N} 匹配N次
{M,N} 匹配M到N次 {0,1}?
{M,} 匹配至少M次 {0,}* {1,}==+
{,N} 最多匹配N次

re_str = r'\d{3}'
result = fullmatch(re_str, '891')
print(result)re_str = r'a\d{2,5}b'
result = fullmatch(re_str, 'a7042b')
print(result)

5)贪婪和非贪婪

在匹配次数不确定的时候匹配模式分为贪婪和非贪婪
贪婪符号:? + * {M,N} {M,} {,N}
在能匹配成功的情况下尽可能多的去匹配
程序默认贪婪
例如匹配1次、3次和4次都能匹配成功,取4次
非贪婪:在能匹配成功的情况下尽可能少的去匹配
例如匹配1次、3次和4次都能匹配成功,取1次
*贪婪模式变非贪婪模式:?? +? ? {M,N}? {M,}? {,N}?
在匹配次数不定的次数后加?,就变成非贪婪模式

from re import fullmatch, search, findall
re_str = r'a.+b'
result = search(re_str, '手机号ashb还是你b黄寺b大街')
print(result)  # 'ashb还是你b黄寺b're_str = r'a.+?b'
result = search(re_str, '手机号ashb还是你b黄寺b大街')
print(result)   # 'ashb're_str = r'a\d{2,5}?b'
result = search(re_str, '手机号a278b还是你b黄寺b大街')
print(result)   # 'a278b'# 获取疫情信息国家名with open('files/data.txt', 'r', encoding='utf-8') as f:content = f.read()
re_str = r'"provinceName":".+?"'
print(findall(re_str, content))

6,正则的转义符号:

1) 符号前加\

在具有特殊功能或者特殊意义的符号前加
让符号原来的功能和意义消失,从而表示符号本身

re_str = r'abc\.'
print(fullmatch(re_str, 'abc.'))re_str = r'abc\+'
print(fullmatch(re_str, 'abc+'))re_str = r'\(\d{3}\)'
print(fullmatch(re_str, '(234)'))

2) 符号放在[]里面

具有特殊意义和功能的独立符号,放在[]里面,对应的功能会自动消失
包含: + ? * $ ^(不放在最前面) |

re_str = r'abc[.\]+?*$^(]'
print(fullmatch(re_str, 'abc]'))

7,正则的分组和分支

1)分组

用括号将正则的一部分看成一个组,来进行整体操作

from re import fullmatch, findall用法一:看成一个整体进行操作'67abc89abc34abc're_str = r'\d{2}[a-z]{3}\d{2}[a-z]{3}\d{2}[a-z]{3}'
print(fullmatch(re_str, '67abc89abc34abc'))re_str = r'(\d{2}[a-z]{3}){3}'
print(fullmatch(re_str, '67abc89abc34abc'))用法二:整体重复在包含分组的正则中,可以通过\N来重复前面第N个分组匹配到的内容re_str = r'a(\d{2})=\1'
print(fullmatch(re_str, 'a97=97'))re_str = r'a(\d{2})=\1{2}'
print(fullmatch(re_str, 'a97=9797'))re_str = r'([a-z]+)=(\d{2,4})=\2\1'
print(fullmatch(re_str, 'ak=879=879ak'))用法三:捕获(只针对findall有效)re_str = r'tel:(\d{5})'
print(findall(re_str, 'tel:23768, name:xiaoming, age:18岁,id:27237486; tel:72891, name:张三, age:67岁, id:23479782'))

2)分支 |

r’正则表达式1|正则表达式2’
先用正则1匹配,如果失败再用正则2匹配

# abc234、abcKLH
# abc\d{3} 、abc[A-Z]{3}
re_str = 'abc\d{3}|abc[A-Z]{3}'    # abc234、abcKLH
print(fullmatch(re_str, 'abcMKL'))re_str = r'abc\d{3}|[A-Z]{3}'   # abc234、KMN
print(fullmatch(re_str, 'KSM'))re_str = r'abc(\d{3}|[A-Z]{3})'   # abc234、abcKLH
print(fullmatch(re_str, 'abc678'))

210222课堂整理(异常捕获和正则)相关推荐

  1. day015异常捕获和正则

    1,异常捕获 什么是异常:程序运行的时候报错了,就是我们程序出现了异常,程序会在异常的地方直接结束,不会往后继续执行. list1 = [10, 20, 30] print(list1[3]) # I ...

  2. 《SpringBoot从菜鸟到老鸟》之SpringBoot 如何配置全局的异常捕获

    SpringBoot 如何配置全局的异常捕获 SpringBoot中自带的异常捕获机制返回的默认页面比较丑,对用户来说不够人性化. 所以这篇文章来讲解SpringBoot钟自定义全局异常捕获. 主要讲 ...

  3. Linux 常用命令整理(Centos7) (时区/正则/sed/htop/screen/ln/awk/……)

    目录 Linux 常用命令整理(Centos7) (附加正则.时区.git等) 一.系统查询常用命令: 1.文件中空格制表符替换sed 2.查看宿主机的用户名密码 3.last .w.lastb 查看 ...

  4. 关于ANR异常捕获与分析,你所需要知道的一切

    关于ANR异常捕获与分析,你所需要知道的一切 2017年11月27日 19:48:05 大_熊_ 阅读数:1796 标签: AndroidANRAMSBugly 更多 个人分类: Android 应用 ...

  5. oracle异常抛出,ORACLE 存储过程异常捕获并抛出

    for tab_name in tables loop execute immediate 'drop table '||tab_name; --此处可能会报错 end loop; 当前情况是,循环表 ...

  6. Spring Boot配置全局异常捕获

    1 SpringBoot配置全局的异常捕获 项目的说明 配置thymeleaf作为视图模板 ExceptionController.java模拟测试用 MyAjaxExceptionHandler.j ...

  7. 简单介绍Go语言错误处理异常捕获+异常抛出

    这篇文章主要介绍了Go语言错误处理异常捕获和异常抛出,Go语言的作者认为java等语言的错误处理底层实现较为复杂,就实现了函数可以返回错误类型以及简单的异常捕获,虽然简单但是也非常精妙,大大的提高了运 ...

  8. 用c实现跨平台异常捕获机制

    为什么80%的码农都做不了架构师?>>>    TBOX封装了一套跨平台的异常捕获实现,来模拟windows的seh异常处理功能,而且是线程安全的. 在linux/mac下的实现 使 ...

  9. python网络编程-异常处理-异常捕获-抛出异常-断言-自定义异常-UDP通信-socketserver模块应用-03

    python网络编程-异常处理-异常捕获-抛出异常-断言-自定义异常-UDP通信-socketserver模块应用-03 参考文章: (1)python网络编程-异常处理-异常捕获-抛出异常-断言-自 ...

最新文章

  1. php 返回查询结果某个字段
  2. 高可用的eureka
  3. 1079 Total Sales of Supply Chain(甲级)
  4. 参加计算机俱乐部的英语怎么说,参加象棋俱乐部用英语怎么说
  5. 用C语言写ucos中断服务程序,在ARM处理器上移植uCOS II的中断处理
  6. 比特币价格会达到10万美元?有人用蒙特卡罗方法预测了一下
  7. HDU2030 汉字统计【入门】
  8. C 标准库 —— stdio.h
  9. 64位字长的高性能微型计算机,什么是字长字节和字长的区别
  10. kali解压deb_Kali下安装网易云音乐
  11. C语言 低通滤波器\带通滤波器\高通滤波器
  12. 区分微信小程序版本(开发工具中、开发版、体验版、正式版)的方法?
  13. vim中的删除键,复制键,粘贴键
  14. 网易实习面经——网易云音乐
  15. 数据库单个插入操作转为批量插入
  16. 【快速上手教程1】疯壳·开源编队无人机-开机测试
  17. post请求改成body_Post 方法参数写在body中和写在url中有什么区别?
  18. 通灵学院|游戏设计研习7:兴趣曲线★(1200字)
  19. SWF Decompiler/Parser/Creater Comparison(opensource)
  20. matlab三维 旋转矩阵,matlab旋转矩阵来旋转三维模型+meshlab旋转模型+matlab基础常用...

热门文章

  1. 宇宙是一个无始无终的循环?道翰天琼认知智能机器人平台API接口大脑为您揭秘-2。
  2. Linux云计算【第一阶段】第十二章:网络管理、进制及SSH管理与攻防
  3. 怎么把html变成桌面壁纸,新手必看,把静态壁纸变为动态壁纸怎么设置?
  4. Java实现 LeetCode 41 缺失的第一个正数
  5. Weex实战分享|企鹅电竞Weex实践和性能优化
  6. FX3 DMA生产者消费者ID代表的含义
  7. 职场管理(3)——提取公积金需要满足哪些条件?你还不知道吧
  8. 爬虫获取微博首页热搜
  9. 用python让excel飞起来 pdf_讯飞会议宝S8体验:以后开会请速记的钱,可以省了
  10. 试着用人话说说 使命 愿景 价值观,以及人的三观