• 【python技巧】文本处理-re库字符匹配


    我们读取文件内容,肯定不是单纯为了输出或者重新写入,对于文本我们一定有一些查找、定位的需求。
    在Python中,还有一个专门用于文本处理的库,那就是re库。
    下面我会介绍re库涉及的正则表达式的基本知识。
    参考课程

    1. 正则表达式

    正则表达式是用来进行字符串匹配的一个字符形式。

    1.1 测试工具

    常见的正则表达式测试工具有:

    1. regex101
    2. 代码编辑器搜索栏的正则表达式匹配

    1.2 限定符

    1. ?
      abc?表示字符c需要出现0次或者1次,或者换句话说,字符c至多出现一次。也就是说,abc?相当于abcab这两个字符串。
      在这里插入图片描述

    2. *
      ab*c表示字符b需要出现0次或者多次,或者换句话说,字符b可以出现任意多次。也就是说,ab*c相当于acabcabbcab……bc等多个字符串。
      在这里插入图片描述

    3. +
      ab+c表示字符b需要出现1次或者多次,或者换句话说,字符b至少出现一次。也就是说,ab+c相当于abcabbcab……bc等多个字符串。
      注意ab*cab+c的细微区别。
      在这里插入图片描述

    4. {}

    • {num}
      ab{3}c表示字符b需要出现3次,或者换句话说,字符b只能出现2次。也就是说,ab{2}c相当于abbc这一个字符串。
      在这里插入图片描述

    • {num1,num2}
      ab{2,5}c表示字符b需要出现2或3或4或5次,也就是说,ab{2,5}c相当于abbcabbbcabbbbcabbbbbc这四个字符串。
      在这里插入图片描述

    • {num,}
      ab{2,}c表示字符b需要出现2次及以上,也就说,ab{2,}c相当于abbcabbbcabbbbcab……bc等无数个字符串。
      在这里插入图片描述

    1.3 字符集

    在正常情况下,上述的限定符只会对其前面的一个字符起作用。如果想要某个字符串作为一个组合,可以使用字符集。
    (ab)+c表示字符串ab需要出现1次或者多次,或者换句话说,字符串ab至少出现一次。也就是说,(ab)+c相当于abcababcabababcab……abc等多个字符串。
    在这里插入图片描述

    1.4 运算符

    1. |
      a(b|d)c表示字符串b出现1次或者字符串d出现1次,也就是说,a(b|d)c相当于abcadc这两个字符串。
      在这里插入图片描述

    a(boy|girl)c也同样适用,相当于aboyc或者agirlc这两个字符。
    在这里插入图片描述

    1. []
      []表示匹配字符能选择的范围,成为字符类,例如,[abc]+只会匹配a\b\c这三个字母出现一次或多次的字符串,而一般更经常使用的是[a-zA-Z0-9]*表示由大小写字母和数字组成的字符串,[a-zA-Z0-9_]*表示由大小写字母、数字和下划线组成的字符串。
      在这里插入图片描述
      在这里插入图片描述

    2. ^
      ^表示取反字符类,也就是说,[^a-zA-Z0-9]*表示除了大小写字母、数字符号以外的其他字符出现一次或多次的字符串。
      在这里插入图片描述

    3. \
      \.表示转置,把一些有特殊意义的字符转变为实际字符

    4. \b
      \b表示字符边界

    1.5 元字符

    1. \d数字字符
      1. \D非数字字符
    2. \w单词字符,包括英文字母、数字、下划线
      1. \W非单词字符
    3. \s空白字符,包括空格、制表符、换行符
      1. \S非空白字符
    4. .任意字符,不包含换行符
    5. ^匹配字符串的开头,例如^a匹配行首的a
    6. $匹配字符串的结尾,例如x$匹配行尾的x

    1.6 懒惰匹配和贪婪匹配

    1. 贪婪匹配
      默认匹配尽可能多的字符。
    2. 懒惰匹配
      例子:<.+>匹配<>之间的任意字符,而<.+?>则会使用懒惰匹配
  • 相关阅读:
    介绍油封的存放方法?
    让“作用域和闭包”说人话
    如何与 TENNECO 建立 EDI 连接?
    可以ping通,防火墙也关闭了,但是ssh无法登录解决方案
    ES6 对象面试题
    爬虫基本原理介绍、实现以及问题解决
    Leetcode 2895. Minimum Processing Time
    BI大屏可视化开发源码,Java+Netcore大屏源码,大屏开发
    如何在局域网外SSH远程访问连接到家里的树莓派?
    壁炉装饰:突破传统的创新趋势
  • 原文地址:https://blog.csdn.net/weixin_44201830/article/details/133050141