异常和正则

1-回顾文件操作

“”"
打开文件:open(文件路径,读写方式=‘r’,encoding=None)
r,w,a(读,写清空内容,写不清空内容)
t,b(文本类型,二进制)
with open(文件路径,读写方式=‘r’,encoding=None)as 文件对象:
操作文件
操作文件:
read()/readline()
write()
关闭文件
文件对象.close()
“”"

2.json(非常重要)

“”"
1)
json格式:1)有且只有一个数据2)数据是json支持的数据类型的数据
数字:89,123,56,-56,3e4
字符串:“ahnc”,“年后”,“abc\n123”
布尔:true,false
数组:
字典
null
2)
json模块
json.loads(json字符串)
json.dumps(python数据)
“”"

异常捕获

print('=============')
#print([1,2,3][10])
age= int(input('请输入年龄'))
print('+++++++++++++')

1.什么是异常捕获

“”"
让程序执行过程中出现异常的时候不崩溃可以继续运行
注意:不是任何时候都要使用异常捕获,是在你明明知道某一个位置可能会出现异常,又不想让程序崩溃的时候才使用

“”"

2.异常捕获的语法

“”"
1)结构一:
try:
代码段1
except:
代码段2
说明:
try/except -关键字,固定写法
: -固定写法
代码段1 -和try保持一个缩进的一条或者多条语句;可能出现异常的代码(需要捕获异常的代码)
代码段2 -异常出现后要做的事情,出现的异常被捕获到了需要执行的代码
执行过程:
先执行代码段1,如果出现异常,直接执行代码段2:否则代码段2不会执行

“”"
练习:输入年龄,如果输入有误提示年龄输入有误的信息

age=int(input('请输入年龄'))
print(age)
try:
   print([1,2,3][10])
except:
   print('出现异常')

“”"
语法二:针对指定类型的异常进行捕获
try:
代码段1
except 异常类型:
代码段2
执行过程:先执行代码段1,如果代码段1出现异常,判断出现的异常的类型和except后面的异常类型是否一致,如果一致程序不崩溃,直接执行代码段2,不一致程序直接崩溃
“”"
“”"
语法三:同时捕获多种异常,针对不同的异常做相同的处理
try:
代码段1
except (异常类型1,异常类型2…):
代码段2
“”"
“”"
语法四:同时捕获多种异常,针对不同一次做不同的处理
try
代码段1
except 异常类型1
代码段11
except 异常类型2
代码段22
except 异常类型3
代码段33

“”"
3.finally关键字
“”"
在所有异常捕获的语法结构的后面都可以添加finally关键字:
try:
代码段1
except:
代码段2
finally:
代码段3
代码段3无论什么情况都会执行(代码段1无论发生什么事情)
“”"

try:
    print([10,20,30][100])
    print('=========')
except KeyError:
    print('捕获到异常')
finally:
    print('写遗书')
print('其他语句')

正则表达式

re模块是Python提供的专门使用正则表达式的相关的函数

from re import fullmatch,search,findall
from fileManager import read_file
# 1.什么是正则表达式
"""
正则表达式是一种让字符串处理更简单的工具(本质是做字符串匹配的)
"""
# 2.正则表达式的语法
"""
fullmatch(正则表达式,字符串)-让正则表达式和字符串进行完全匹配,如果匹配失败结果是None
js的正则:/正则表达式/
python的正则:r'正则表达是'
"""
# 1)普通字符 -表示字符本身
re_str=r'abc'
result=fullmatch(re_str,'abc')
print(result)

# 2).-匹配一个任意字符
re_str=r'.abc'
result=fullmatch(re_str,'Habc')
print(result)

# 匹配一个长度是5,字符串中间是ABC,第一个和最后一个字符串随意
re_str=r'.ABC.'
result=fullmatch(re_str,'HABCa')
print(result)
# 匹配一个长度是3的任意字符串
re_str=r'...'
result=fullmatch(re_str,'HAa')
print(result)
# 3)\w -匹配任意一个数字、字母或者下划线(针对ASCI码表有效)
re_str=r'\wabc'
result=fullmatch(re_str,'8abc')
print(result)
# 4)\d -匹配任意一个数字字符
re_str=r'\d\d\d'
result=fullmatch(re_str,'123')
print(result)
# 5)\s-匹配任意一个空白字符
re_str=r'\s\d..'
result=fullmatch(re_str,' 9k/')
print(result)
# 6)\D和\S
"""
\字母-小写字母和对应的大写字母功能相反
"""
re_str=r'\dabc\D'
result=fullmatch(re_str,'8abc-')
print(result)

re_str=r'\Sabc'
result=fullmatch(re_str,'=abc')
print(result)
# 7)[字符集]-匹配字符集中出现的任意一个字符
"""
注意:一个[]只能匹配一个字符
a.
[abc123]-匹配a、b、c、1、2、3中任意一个字符
b.
[a-z] -匹配从字符a到字符z之间的任意一个字符(匹配任意一个小写字母)
[A-Z] -匹配任意一个大写字母
[a-zA-Z]-匹配任意一个字母
[0-9] -匹配任意一个数字字符 
[\u4e00-\u9fa5]-匹配任意一个中文字符
"""
re_str=r'[abcABC]123'
result=fullmatch(re_str,'b123')
print(result)

re_str=r'[\u4e00-\u9fa5]123'
result=fullmatch(re_str,'看123')
print(result)

练习:判断输入手机号码是否合法

re_str=r'1[3-9]\d\d\d\d\d\d\d\d\d'
result=fullmatch(re_str,'13598902762')
print(result)

[]中-前面的字符编码值必须小于-后面的字符编码

result =fullmatch(r'[a-0]abc',0abc')

[]-如果不在两个字符之间,-就没有特殊功能直接表达它本身
result=fullmatch(r'[-09]abc','-abc')
print(result)

练习:写一个正则表达式,要求可以匹配一个字符串:abc前面是数字、字母、下划线

re_str=r'[a-zA-Z\d_]abc'
result=fullmatch(re_str,'0abc')
print(result)
 8)[^字符集] -取任意一个不在字符集中的字符
"""
[^\u4e00-\u9fa5]-匹配一个非中午字符
[^0-9] - .......
[^a-z] - .......
"""
print(fullmatch(r'[abc^]123','b123'))
print(fullmatch(r'[^abc]123','a123'))

print('================2.检测符号==========')
# 1)\b -检测是否是单词的边界
"""
单词边界:字符串开头、字符串结尾、凡是能区分出两个不同单词的符号都是属于单词分界
注意:检测类的符号不影响匹配的长度,只是在匹配成功的时候做进一步的检测
"""
message='how are you ?i am fine !thank you!'
re_str=r'\d\d.\b\d\d'
print(fullmatch(re_str,'56=89'))
# 2)^ -检测所在的位置是否是字符串开头
re_str=r'\d^abc'
print(fullmatch(re_str,''))

re_str=r'\d\d\d'
print(fullmatch(re_str,'678'))
print(search(re_str,'sd4564646'))

# 3)$-检测$所在的位置是否是字符串结尾
re_str=r'\d\d$'
print(search(re_str,'时代风骏78暗示89'))

print('==============3.匹配次数==============')
# 1)* -匹配0次或多次
"""
字符* -字符出现0次或多次

"""
re_str=r'a*'
print(fullmatch(re_str,'aaa'))
re_str=r'\d*'
print(fullmatch(re_str,'478923'))

re_str=r'123[a-z]*'
print(fullmatch(re_str,'123ukl'))

# 2)+  -匹配1次或多次(至少1次)
re_str=r'a+'
print(fullmatch(re_str,'a'))

# 3)? -匹配0次或1次
re_str=r'\d?abc'
print(fullmatch(re_str,'0abc'))
# 练习:写一个正则表达式可以匹配任意一个整数字符串
re_str=r'[-+]?\d+'
print(fullmatch(re_str,'-234'))

# 4){}
"""
{N}-匹配N次
{M,N}-匹配到M到N次
{M,}-匹配至少M次
"""
re_str=r'\d{4}abc'
print(fullmatch(re_str,'4615abc'))

re_str=r'a{2,5}123'
print(fullmatch(re_str,'aaa123'))

re_str=r'a{2,}123'
print(fullmatch(re_str,'aa123'))

re_str=r'a{,2}123'
print(fullmatch(re_str,'a123'))

4)贪婪和非贪婪

“”"
在匹配次数不确定的情况下,匹配模式分为两种:贪婪和非贪婪
贪婪:默认都是贪婪的(在能匹配到的前提下匹配次数尽可能多)
*、+、?,{M.N}、{M,}、{,M}
非贪婪:(在能匹配到的前提下匹配次数尽可能少)在匹配次数不确定的时候,次数后面加问号,匹配方式就是非贪婪的
*?、+?、??、{M.N}?、{M,}?、{,M}?
“”"

re_str=r'\d{2,}'
print(search(re_str,'护士227382你好!'))
re_str=r'\d{2,}?'
print(search(re_str,'护士227382你好!'))

练习:获取疫情信息中所有的国家的名字
content=read_file(’’)
#…

分支和分组

from re import fullmatch
## 1.分支:|
# 正则1|正则2|正则3|...
# 写一个正则匹配一个字符串:123abc和456abc
re_str=r'123abc|456abc'
print(fullmatch(re_str,'123abc'))

# 2.分组:()
"""
1)整体操作

"""
# abc出现3次
re_str=r'(abc){3}'
print(fullmatch(re_str,'abcabcabc'))
#写一个正则匹配一个字符串:123abc和456abc
re_str=r'(123|456)abc'
print(fullmatch(re_str,'123abc'))
# 两个数字两个字母的结构重复4次
re_str=r'(\d\d[a-zA-Z]{2}){4}'
print(fullmatch(re_str,'34hj56kl67uj23bm'))
"""
2)重复:
\M-重复前面第M个分组匹配到的内容(M从1开始)
"""
re_str=r'(\d\d)=\1abc'
print(fullmatch(re_str,'67=67abc'))

re_str-=r'(\d\d)-([a-z]{3})-\2-\1'
print(fullmatch(re_str,'23-bnm-bnm-23'))

"""
3)捕获
findall
"""
# 3.转义符号:在具有特殊功能或者特殊意义的符号前加\,让功能消失
re_str=r'\.\d\d'
print(fullmatch(re_str,'.23'))

# 注意:独立存在有特殊功能的符号在[]中功能会自动消失
re_str=r'[-+.]abc'
print(fullmatch(re_str,'.abc'))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值