python基础 day19 正则表达式

Day19 笔记

正则表达式

re模块 -- regex (正则表达式) 有了re模块就可以在python语言中操作正则表达式

什么是正则表达式
一套规则 -- 匹配字符串
正则表达式能做什么
1.检测一个输入的字符串是否合法 —— 应用场景:web开发项目 表单验证
用户输入一个内容时提前做检测
能够提高程序的效率并减轻服务器的压力
2.从一个大文件中找到所有符合规则的内容 —— 应用场景:日志分析 爬虫
能够高效地从一大段文字中快速找到符合规则的内容

正则规则
所有的规则中的字符就可以刚好匹配到字符串中的内容

  1. 字符组 []
    一个中括号只表示一个字符位置,描述的是一个位置上能出现的所有可能性
    接受范围,连着写可以描述多个范围
    [abc] 可以匹配到a或b或c
    [0-9] 可以匹配到数字0-9的任意一个,是根据ASCII码进行范围对比,同理[a-z]、[A-Z]
    [a-zA-Z] 大小写都可以匹配到
    [0-9a-z] 数字和小写字母都可以匹配到
    [0-9][0-9] 匹配到的是两位数字

  2. 元字符:正则表达式中能够表示匹配内容的符号都是正则中的‘元字符’
    [] 字符组
    \d 表示匹配一位任意数字(digit)
    \w 表示匹配以为数字、字母或下划线(word)
    \s 表示所有空白(空格、enter、tab),空格使用 匹配,enter使用\n匹配,tab使用\t匹配
    \D 匹配非数字的字符
    \W 表示非数字、字母、下划线
    \S 匹配非空白符
    . 表示匹配除了换行符之外的所有字符
    [\d\D]、[\w\W]、[\s\W] 表示匹配所有字符
    [^\d] 非字符组,表示除^后面以外的所有字符
    ^ 匹配一个字符串的开始
    $ 匹配一个字符串的结尾
    | 或 a|b 匹配a或者b,若匹配a成功,就不继续和b匹配;若|两边给规则有重叠部分,把长的规则放|左边
    () 约束|描述的范围 www.(baidu|jd|google).com

  3. 量词
    {n} 表示匹配n次
    {n} 表示至少匹配n次
    {n,m} 表示至少匹配n次,最多匹配m次
    ? 表示匹配0次或1次
    +表示匹配1次或多次
    *表示匹配0次或多次

  4. 匹配0次的用处
    匹配一个正整数 \d+
    匹配一个整数(正整数或负整数) -?[1-9]\d*
    匹配一个小数 \d+.\d+
    匹配一个整数或小数 \d+(.\d+)?
    匹配手机号码 11位,第1个数字是1,第2个数字只能3-9
    1.判断输入手机号是否合法 ^1[3-9]\d{9}$
    2.从一个大文件中找到符合规则的内容 1[3-9]\d{9}

  5. 贪婪匹配
    在量词范围允许的情况下,尽量多地匹配内容
    .*x 表示匹配任意字符,任意多次数,遇到最后一个x才停下来

    惰性匹配
    .*?x 表示匹配任意字符,任意多次数,一旦遇到x就停下来

  6. 转义符
    原本有特殊意义的字符,到了表达它本身的意义的时候,需要转义
    有一些有特殊意义的内容,放在字符组中,会取消它的特殊意义 如:[().*+?]
    -在字符组中表示范围,如果不希望它表示范围,需要转义

练习:

  1. 18/15位身份证号

    18位身份证:1-9 16 0-9或x

    15位身份证:1-9 14

答案是: ^[1-9](\d{16}[\dx]|\d{14})$
或者:^[1-9]\d{14}(\d{2}[\dx])?$

猜你喜欢

转载自www.cnblogs.com/west-yang/p/12709778.html