五异常捕获和正则表达式
一、异常捕获
"""
语法1: 捕获所有类型的异常
try:
代码1
except:
代码2
说明:try,except都是关键字
代码1————需要捕获异常代码
代码2————出现异常后,会执行的代码
执行过程:先执行try里的代码,没有异常,直接执行其他代码(不会执行代码段2)
如果代码1出现异常,则马上执行except后的代码2
语法2: 某一种异常
try:
代码1
except 指定异常类型:
代码2
语法3: 同时捕获多种异常,但是异常之后都会执行代码2
try:
代码1
except(异常1,异常2。。。。):
代码2
语法4: 与语法三基本相同,只是针对不同异常,代码执行的不一样
try:
代码1
except 异常1:
代码11
except 异常2:
代码22
except 异常3:
代码33
。。。
"""
二、正则匹配符号
from re import fullmatch
re_str = 'dsa'
result = fullmatch(re_str, 'dsa')
print(result)
re_str2 = 'a.c'
result2 = fullmatch(re_str2, 'a胡c')
print(result2)
re_str3 = r'a\d\da'
result3 = fullmatch(re_str3, 'a12a')
print(result3)
re_str4 = r'\d\d\s\d\d'
result4 = fullmatch(re_str4, '45 56')
print(result4)
re_str5 = r'\Dabc'
result5 = fullmatch(re_str5, '=abc')
print(result5)
re_str6 = r'\d\Ddsa'
result6 = fullmatch(re_str6, '8=dsa')
print(result6)
"""
注意:一个[]只能匹配一个字符
-如果在两个字符之间,表示范围,前面编码值小于后面编码值
-如果不在两个字符之间,就表示-本身
[abc你] -- 能匹配a或者b或者c,或者‘你’
[abc\d] -- 能匹配a或者b或者c,或者任意一个数字
’a[23456]b‘ -- a和b之间有2到6的任意一个数字
’a[2-6]b‘ -- a和b之间有2到6的任意一个数字
[a-zA-Z] -- 匹配任意一个字母
[A-Z\d] -- 匹配一个任意大写字母或者任意一个数字
[\u4e00-\u9fa5] -- 匹配任意一个中文
"""
re_str7 = r'[\dA-Za-z_]123'
result7 = fullmatch(re_str7, '_123')
print(result7)
三、正则检测类的符号
from re import fullmatch, search
re_str1 = r'abc\b,123'
result1 = fullmatch(re_str1, 'abc,123')
print(result1)
re_str2 = r'a.\Bb'
result2 = fullmatch(re_str2, 'apb')
print(result2)
re_str3 = r'^\d\d\d'
result3 = fullmatch(re_str3, '456')
print(result3)
re_str3 = r'^\d\d\d'
result3 = search(re_str3, 'dsah456as45x')
print(result3)
re_str3 = r'\d\d\d'
result3 = search(re_str3, 'dsah456as45x')
print(result3)
re_str4 = r'\d\d\d$'
result4 = search(re_str4, 'dsah456as45x')
print(result4)
四、匹配次数
from re import fullmatch, search
re_str1 = r'a\d*b'
result1 = fullmatch(re_str1, 'ab')
print(result1)
re_str2 = r'a\d+b'
result2 = fullmatch(re_str2, 'a12123b')
print(result2)
re_str3 = r'-?\d\d'
result3 = fullmatch(re_str3, '-23')
print(result3)
re_str4 = r'[-+]?\d+'
result4 = fullmatch(re_str4, '0')
print(result4)
"""
{N} --匹配N次
{M,N} --匹配M到N次
{M,} --匹配至少M次
{,N} --匹配最多N次
"""
re_str4 = r'\d{5}'
result4 = fullmatch(re_str4, '45612')
print(result4)
re_str4 = r'a\d{2,5}b'
result4 = fullmatch(re_str4, 'a456b')
print(result4)
re_str5 = r'a.+b'
result5 = fullmatch(re_str5, 'a4561b3后端b')
print(result5)
re_str5 = r'a.+?b'
result5 = search(re_str5, 'a4561b3后端b')
print(result5)
五、分支和分组
from re import fullmatch, search, findall
re_str1 = r'(\d{2}[a-z]{3}){3}'
print(fullmatch(re_str1, '45fda78dsa55xzc'))
re_str1 = r'a(\d{2})\1'
print(fullmatch(re_str1, 'a4545'))
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'))
re_str1 = r'dsa(\d{3}|[A-Z]{3})'
print(fullmatch(re_str1, 'dsa456'))
print(fullmatch(re_str1, 'dsaBNM'))
六、转义符号
from re import fullmatch
re_str = r'dsa\.'
print(fullmatch(re_str, 'dsa.'))
re_str = r'\(\d{3}\)'
print(fullmatch(re_str, '(456)'))
re_str = r'dsa[.+?$^()]'
print(fullmatch(re_str, 'dsa)'))