Python之第三十二天的努力--正则表达式

正则表达式

  1. 什么是正则表达式

    一套规则 --- 匹配字符串

  2. 能做什么

    • 1.检测一个输入的字符串是否合法 ----> web开发项目 表单验证
      • 用户输入一个内容时,我们要提前做检测,能够提高程序的效率并且减轻服务器的压力。
    • 2.从一个大文件中找到所有符合规则的内容 ----> 日志分析\爬虫
      • 能够高效的从一大段文字中快速找到符合规则的内容
  3. 正则规则

    image-20200710200918478

    • 所有的规则中的字符就可以刚好匹配到字符串中的内容
  4. 字符组

    • 描述的是一个位置上能出现的所有可能性

    • 接受范围,可以描述多个范围,连着写就可以了

    • [abc] 一个中括号只表示一个字符位置 --- 匹配a或者b或者c

      [0-9] 根据ASCII进行范围的比对

      [a-z] ---> 所有小写字母

      [A-Z] ---> 所有大写字母

      [a-zA-Z] ---> 大小写字母

      [0-9a-zA-Z] ---> 所有数字和字母下划线

    • [0-9] ---> \d 表示匹配一位任意数字 digit

    • [0-9a-zA-Z] ---> \w 表示匹配所有数字字母下划线 word

    • 空白(空格\tab\enter) ---> ( |\t|\n)

    • 空白(空格\tab\enter) ---> \s

  5. 元字符 ---> 匹配内容的规则

    • [] ---> 字符组

    • \d ---> 表示匹配一位任意数字

    • \w ---> 表示匹配所有数字字母下划线

    • \t ---> 表示匹配tab

    • \n ---> 表示匹配enter

    • \s ---> 表示匹配所有空白符

    • \W ---> 表示匹配非数字字母下划线

    • \D ---> 表示匹配非数字

    • \S ---> 表示匹配非空白符

    • [\d\D] [\w\W] [\s\S] ---> 表示匹配所有

    • . ----> 表示匹配除了换行符之外的所有 (但是可以设置)

    • [^] ---> 表示匹配所有的非...

    • [^\d] ---> 表示匹配所有的非数字

    • ^ ---> 表示匹配一个字符串的开始

      image-20200710205619612

    • $ ---> 表示匹配一个字符串的结尾

      image-20200710205702216

    • a表达式|b表达式 ---> 表示匹配a或者b表达式中的内容,如果匹配a成功了,不会继续和b匹配

      ​ 所以,如果两个规则中有重叠部分,总把长的放在前边

    • () ---> 表示 约束 | 描述的内容的范围问题

    • ......\b ----> 表示以......结尾的单词

      image-20200710211908917

    • 练习

      • 匹配 www.baidu.com和www.hhh.com
      • 当匹配 . 时 要加 \ ----> \ .
      • image-20200710211155288
      • image-20200710211434976
  6. 量词

    • {n} 表示匹配n次

      image-20200712151713160

    • {n,} 表示匹配至少n次

      image-20200712151859660

    • {n,m} 表示至少匹配n次,至多匹配m次

      image-20200712151937710

    • ? 表示匹配0次或1次

      image-20200712152032050

    • + 表示匹配1次或多次

      image-20200712152113651

    • * 表示匹配0次或多次

      image-20200712152206318

    • 匹配0次

      • 匹配整数 \d+
      • 匹配小数 \d+\.\d+
      • 匹配整数或小数 \d+\.?\d* \d+(\.\d+)?
    • 匹配手机号码

      • 1开头 第二位:3~9 共11位 1[3-9]\d

      • 判断用户输入的内容是否合法,如果用户输入的对就能查到结果,如果输入的不对就不能查到结果

        ^1[3-9]\d{9}$

      • 从一个大文件中找到所有符合规则的内容 1[3-9]\d

  7. 贪婪匹配

    • 在量词范围允许的情况下,尽量多的匹配内容。

      回溯算法

    image-20200712155221133

    • .*x 表示匹配任意字符 任意多次 遇到最后一个x才停下来
  8. 非贪婪(惰性)匹配:量词后加 ?

    • 元字符 量词 ?

    image-20200712155445152

    • .*?x 表示匹配任意字符 任意多次 但是一旦遇到x就停下来
  9. 转义符

    • 原本有特殊意义的字符,到了表达它本身的意义的时候,需要转义
      • \. -----> .
      • \\n ----> \n
      • \( -----> (
    • 有一些有特殊意义的内容,放在字符组中,会取消它的特殊意义
      • [().*+?] ----> 所有的内容在字符组中会取消他的特殊意义
      • [a\-c] --->在字符组中表示范围,如果不希望它表示范围,需要转义,或者放在字符组的最前面或最后面
  10. 练习

    • 18或15位的身份证号

      15:第一位:1~9

      18:第一位:1~9 最后一位:0~9或x

      [1-9]\d{16}[\dx]|[1-9]\d{14}

      ^([1-9]\d{16}[\dx]|[1-9]\d{14})$

      [1]\d{14}(\d{2}[\dx])?$


  1. 1-9 ↩︎

posted @ 2020-07-12 16:47  ET-珩  阅读(129)  评论(0)    收藏  举报