017#正则和异常

一、什么是异常捕获
让程序执行过程中出现异常的时候不崩溃可以继续运行。

注意:不是任何时候都要使用异常捕获,是在你明明知道某个位置可能会出现异常,又不想让程序崩溃的时候才使用
二、异常捕获的语法
语法一:获取所有异常
try:
    代码段1
except:
    代码段2

    
说明:
tryexcept     关键字,固定写法
:               固定写法
代码段1try保持一个缩进的一条或者多条语句; 可能会出现异常的代码(需要捕获异常的代码)
代码段2          出现的异常被捕获到了,需要执行的代码

执行过程:
先执行代码段1,如果执行执行过程中出现异常直接执行代码段2;如果代码段1中没有异常代码段2不会执行

语法二:针对指定类型的异常进行捕获
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
三、正则表达式的作用和语法
re模块:python提供的专门使用正则表达式的相关的函数的模块
    
作用:
正则表达式是一种让字符串处理更简单的工具(本质是做字符串匹配)

语法:
fullmatch(正则表达式, 字符串)  - 让正则表达式式和字符串进行完全匹配,如果匹配失败结果是None
其他re模块提供的函数的语法也相似
四、正则表达式常用的特殊符号
4.1 匹配符号 
符号                                      功能
.                                     匹配一个任意字符
\w                       匹配任意一个数字、字母或者下划线(针对ASCII码表有效)(不用)
\d                                    匹配一个任意数字字符
\D                                    匹配任意一个非数字字符
\s                                    匹配任意一个空白字符
\S                                    匹配任意一个非空白字符 
[字符集]                       匹配字符集中出现的任意一个字符(只能匹配一个字符)
[a-z]                              匹配从字符a到字符z之间的任意字符
[a-zA-Z]                               匹配任意一个字母
[0-9]                                  匹配任意一一个数字字符
[^字符集]                             取任意一个不在字符集中的字符
[^\u4e00-\u9fa5]                       匹配任意一个非中文字符
注意:-号的前面的字符的编码值小于后面字符的编码中

4.2 检测符号
\b            检测是否是单词的边界
单词边界:字符串开头、字符串结尾、凡是能区分两个单词的符号
^             检测^所在的位置是不是字符串的开头
$             检测$所在的位置是否是字符串的结尾
注意:检测类的符号不影响匹配的长度,只是在匹配成功的时候进行检测

4.3 匹配次数
*             匹配零次或多次                 
+             匹配一次或者多次(至少一次)            
?             匹配一次或零次
{N}           匹配N次
{M,N}         至少匹配M次,最多匹配N次
{M,}          至少匹配M次
{,N}          最多匹配N次

4.4 贪婪和非贪婪
在匹配次数不确定的情况下,匹配模式分为两种:贪婪和非贪婪
a.贪婪:默认都是贪婪的(在能匹配到的前提下匹配次数尽可能多)
        *+、?, {M,N}{M,}{,N}

b.非贪婪:(在能匹配到的前提下匹配次数尽可能少)在匹配次数不确定的时候,次数后面加问号,匹配就是非贪婪的
      *?、+?、??、{M,N}?、{M,}?、{,N}?
五、分支和分组
5.1 分支
符号:|(或者)
用法:
from re import fullmatch
re_str=r'[a-z]+|\d+|aa'
print(fullmatch(re_str,'23'))
结果:
<re.Match object; span=(0, 2), match='23'>

5.2 分组
符号:()
1)整体操作
from re import fullmatch
re_str = r'(abc){3}'
print(fullmatch(re_str, 'abcabcabc'))
结果:
<re.Match object; span=(0, 9), match='abcabcabc'>

2)重复
\M       重复前面第M个分组匹配到的内容(M从1开始)
from re import fullmatch
re_str = r'(\d\d)-([a-z]{3})-\2-\1'
print(fullmatch(re_str, '23-bnm-bnm-23'))
结果:
<re.Match object; span=(0, 13), match='23-bnm-bnm-23'>

3)捕获
findall   返回一个列表
from re import findall
re_str=r'\d{2}[a-z]'
print(findall(re_str, '22ashg15sdsd+-58a$5'))
结果:
['22a', '15s', '58a']
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值