学习日志2.22

本文详细介绍了Python中的异常处理机制,包括try-except的四种语法形式,以及finally关键字的使用,确保代码在异常情况下仍能执行关键操作。同时,文章深入探讨了正则表达式的各种匹配符号和操作,如普通字符、特殊字符、匹配次数、分支和分组,以及转义符号等,帮助读者掌握正则表达式的高级用法。
摘要由CSDN通过智能技术生成

学习日志2.22

  1. 异常捕获

    程序出错后会立刻停止,不会再继续执行

    异常捕获:当程序出现异常时,程序不会崩溃,继续执行后续代码

    异常的产生并不取决于代码时,就可以使用异常捕获

    语法1:捕获所有异常
    try:
        需要捕获异常的代码
    except:
        异常捕获后会执行的代码
    
    语法2try:
        需要捕获异常的代码
    except 异常类型:
        异常捕获后会执行的代码
    
    语法3try:
        需要捕获异常的代码
    except (异常类型1,异常类型2……):
        异常捕获后会执行的代码
    
    语法4try:
        需要捕获异常的代码
    except 异常类型31
        异常捕获后会执行的代码
    except 异常类型2:
        异常捕获后会执行的代码
    except 异常类型3:
        异常捕获后会执行的代码
    # try 在捕获到异常后,对比异常类型,后续代码不再执行
    try:
        age = int(input('输入年龄'))
    except:
        print('输入格式错误')
        age = None
    
    print(age)
    
    try:
        with open('./asd.txt', 'r', encoding='utf-8') as f:
            pass
    except:
        with open('./asd.txt', 'w', encoding='utf-8') as f:
            pass
    
    with open('./asd.txt', 'r', encoding='utf-8') as f:
        f.read()
    
    

    关键字 finally

    finally的存在并不影响原来的异常捕获的执行

    finally后面的代码无论try中的代码发生什么情况都会执行,就算异常没有被捕获,或者程序即将崩溃

  2. 正则匹配类符号

    正则表达式是一种字符串处理工具

    1. 普通字符

      普通字符指的是正则表达式中除了特殊符号以外的符号

      re_str = 'abc'
      result = fullmatch(re_str, 'abc')
      print(result)
      
    2. 特殊字符

      # 2.  .  匹配一个任意字符
      re_str = 'a.c'  # 一个字符串有三个字符,第一个a,最后一个c,中间任意
      result = fullmatch(re_str, 'avc')
      print(result)
      
      # 3.  \d  匹配一个任意数字
      re_str = r'a\d\db'  # 一个字符串有四个字符,第一个为a,最后为b,中间是数字
      result = fullmatch(re_str, 'a56b')
      print(result)
      
      # 4.  \s  匹配一个任意空白字符
      # 空白字符:空格、\n、\t
      re_str = r'\d\d\s\d\d'
      result = fullmatch(re_str, '12 34')
      print(result)
      
      # 5.  \D  匹配任意一个非数字
      # 6.  \S  匹配一个任意非空白字符
      # 7.  [字符集]  匹配字符集中任意一个字符
      """
      [abc123]
      [abc\d]   a、b、c或者任意一个数字
      [2-8]   -表示2到8
      [a-z]
      [a-zA-Z] 匹配任意字母
      [\u4e00-\u9fa5]  匹配任意中文
      [abc-]
      
      一个[]只能匹配一个字符
      -表示范围,前面字符串的编码值必须小于后面字符的编码值
      如果-不在两个字符之间则表示-本身
      """
      re_str = r'[\da-zA-z-]123'
      result = fullmatch(re_str, 'f123')
      print(result)
      # 8.  [^字符集]  字符集的补集
      
      
  3. 正则检测类符号

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

    检测类符号:检测符号所在的位置是否符合要求,检测类符号不影响匹配

    先匹配再进行检测,检测符号不影响匹配字符长度

    # 1.  \b  单词边界
    # 单词边界:所有可以划分出两个不同单词的符号,包括空白、标点符号、字符串开头或者结尾
    re_str = r'abc\b,123\b'
    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, 'apb')
    print(result)
    
    # 3.  ^  字符串开头
    re_str = r'^\d\d\d'
    result = fullmatch(re_str, '234')
    print(result)
    
    # 4.  $  字符串结尾
    
  4. 匹配次数

    # 1.  *  匹配0次或多次
    # a*  匹配任意多个字符a
    # \d*  匹配任意多个\d(数字字符)
    re_str = r'1a*2'
    result = fullmatch(re_str, '1aaa2')
    print(result)
    
    re_str = r'a\d*b'
    result = fullmatch(re_str, 'a24324325b')
    print(result)
    
    re_str = r'1[abc]*2'
    result = fullmatch(re_str, '1ac2')
    print(result)
    
    # 2.  +   匹配一次或多次
    # 3.  ?  匹配零次或一次
    # re_str = r'[+-]?\d+'  # 整数
    
    # 4.  {}
    """
    {N}  匹配N次
    {M,N}  匹配M到N次
    {M,}  匹配至少M次
    {,N}  匹配最多N次
    """
    re_str = r'a\d{3,45}b'
    result = fullmatch(re_str, 'a342b')
    print(result)
    
    # 5.  贪婪和非贪婪
    # 在匹配次数不确定的时候匹配模式分贪婪和非贪婪
    # 贪婪:在能匹配成功的前提下尽可能多匹配
    # 非贪婪:在能匹配成功的前提下尽可能少匹配,在匹配次数不定的次数后加?,变为非贪婪
    #
    re_str = r'a.+b'
    re_str2 = r'a.+?b'
    result = re.search(re_str, 'a bbb')  # 默认贪婪
    result2 = re.search(re_str2, 'a bbb')
    print(result, result2)
    
  5. 分支和分组

    # 1.分组
    # 用()将部分正则表示为一个整体进行操作
    re_str = r'(\d{2}[a-z]{3}){3}'
    print(fullmatch(re_str, '23khh34fgr74dfg'))
    
    # 整体重复
    # 在包含分组的正则中,可以通过\N来重复前面第N个分组匹配到的内容
    re_str = r'a(\d{2})\1'
    print(fullmatch(re_str, 'a1212'))
    re_str = r'a(\d{2})\1{3}'
    print(fullmatch(re_str, 'a34343434'))
    
    # 捕获(只作用于findall)
    re_str1 = r'tel:(\d{5})'  # 只获取括号内的内容
    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.分支  |
    # 分支符号前后视为一个整体
    re_str2 = r'abc(\d{2}|[A-Z]{3})'
    
  6. 转义符号

    # 转义符号:在特殊符号前加\使符号意义消失
    re_str = r'abc\.'
    print(fullmatch(re_str, 'abc.'))
    re_str = r'\(\)'
    print(fullmatch(re_str, '()'))
    
    # 具有特殊意义和功能的独立的符号,放在[]内功能消失
    re_str = r'abc[.]'
    print(fullmatch(re_str, 'abc.'))
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值