异常和正则
异常捕获
1.什么是异常捕获
让程序执行过程中出现异常的时候,程序不崩溃,可以继续进行 注意:不是任何时候都要使用异常捕获,是在某个位置明知可能会出现异常,又不想让程序崩溃的时候才使用
2.异常捕获的语法
1)语法
1:可以捕获所有异常
try:
代码段
1
except:
代码段
2
说明:
try、excpet
: - 关键字,固定写法
: - 固定写法
代码段
1 - 和
try保持一个缩进的一条或多条语句;可能会出现异常的代码
(需要捕获异常的代码
)
代码段
2 - 和excpet保持一个缩进的一条或多条语句;出现异常被捕获到了,需要执行的代码
执行过程:先执行代码段
1,如果执行过程出现异常,直接执行代码段
2,如果没有异常,代码段
2不会执行
try:
int(input())
except:
print('输入有误')
语法
2:针对特定的异常进行捕获
try:
代码段
1
except 异常类型
:
代码段
2
执行过程:先执行代码段
1,如果代码段
1出现异常,判断出现的异常类型和
except后面的异常类型是否一致,如果一致
不崩溃直接执行代码段
2,如果不一致直接崩溃
语法
3:同时捕获多种异常,做相同处理
try:
代码段
1
except (异常类型
1,异常类型
2,
...):
代码段
2
语法
4:同时捕获多种异常,做不同处理
try:
代码段
1
except 异常类型
1:
代码段
2
except 异常类型
2:
代码段
3
.......
在所有异常捕获的语法的最后边都可以添加
finally关键字
try:
代码段
1
except:
代码段
2
finally:
代码段
3
代码段
3无论什么情况都会执行
(代码段
1无论发生什么事情
)
正则表达式
1.什么是正则表达式
正则表达式是一种让字符串处理更简单的工具(本质是做字符串匹配)
2.正则表达式的语法
re模块是python提供的专门使用正则表达式的相关函数的模块
from re
import fullmatch
fullmatch
(正则表达式,字符串
) - 让正则表达式和字符串进行匹配,如果匹配失败结果是
None
js的正则:
/正则表达式
/
python的正则: r
'正则表达式'
匹配符号:
1) 普通字符
- 表示字符本身
2) . - 匹配一个任意字符
3) \w
- 匹配任意一个数字、字母、下划线
(针对ASCII表有效
)
4) \d
- 匹配一个任意数字
5) \s
- 匹配一个空白字符
6) \S和\D
- 大写字母个小写字母的功能相反
7) [字符集
] - 匹配字符集中出现的任意一个字符
注意:一个
[]只能匹配一个字符
a
.[abc123
] - 匹配a b c
1 2 3中任意一个字符
b
.[a
-z
] - 匹配从a到z中的任意一个小写字母
[A
-Z
] - 匹配从a到z中的任意一个小写字母
[a
-zA
-Z
] - 匹配任意一个字母
[\u4e00
-\u9fa5
] - 匹配一个任意中文字符
8) [^字符集
] - 匹配除了中括号里面的任意字符
'''
# 匹配一个字符串:abc前面是数字、字母或者下划线
re_str = r'[0-9a-zA-Z_]abc'
result = fullmatch(re_str, 'aabc')
print(result)
'''
检测符号:
1) \b
- 检测是否是单词边界
单词边界:字符串开头、结尾,能区分出两个不同单词的符号
注意:检测类符号不影响匹配的长度,只是在匹配结束后作进一步的检测
2) ^ - 检测
^所在的位置是不是字符串开头
3) $
- 检测$所在的位置是不是字符串结尾
'''
'''
匹配次数:
1) * - 匹配
0次或多次
2) + - 匹配一次或多次
3) ?
- 匹配
0次或者
1次
4){N
} - 匹配N次
{M
,N
} - 匹配M到N次
{M
,} - 匹配至少M次
{,N
} - 匹配
0到N次
'''
# 写一个正则表达式,可以匹配任意一个整数字符串
re_str = r'[-+]?\d+'
print(fullmatch(re_str, '121212'))
'''
贪婪和非贪婪
:
在匹配次数不确定的情况下,匹配模式分为贪婪和非贪婪
贪婪
- 默认都是贪婪的
(在能匹配到的前提下,匹配次数尽可能多
)
非贪婪
- 在匹配次数不确定的时候,次数后边加?,匹配方式变成非贪婪模式,则在匹配成功的情况下,匹配次数
尽可能少
正则表达式前加
(?i
)表示忽略大小写
单行匹配
(?s
)和多行匹配
(?m
)
单行匹配的时候
. 可以匹配 \n
,多行匹配的时候不行
re_str
= r
'(?s)abc.123'
print(fullmatch
(re_str
,'abc\n123'))
分支和分组
1.分支:|
写一个正则匹配字符串:
123abc 或者
456abc
re_str
= r
'123abc|456abc'
print(fullmatch
(re_str
, '123abc'))
print(fullmatch
(re_str
, '456abc'))
2.分组:()
1)整体操作
2)重复
\M
- 重复前面第M个分组匹配到的内容
(M从
1开始
)
3)捕获 findall
re_str
= r
'(abc){3}'
print(fullmatch
(re_str
, 'abcabcabc'))
re_str
= r
'(\d\d)\1abc'
print(fullmatch
(re_str
, '1212abc'))
转义符号:在具有特殊功能或者特殊意义的符号前加\,让功能消失(. +) 注意:独立存在有特殊功能的符号在[]中,功能会自动消失