• 正则表达式


    # 什么是正则表达式
    # 一种匹配字符串的规则
    # input 一串数据 :
    # 是不是qq号码 : 全数字 5位以上 12位一下,第一位不是零
    # 是不是身份证号 : 18位/15位 第一位不是零 18位的最后一位可能是x或者数字
    # 有一个文件
    # 要你把这个文件中所有的手机号都摘取出来
    # 正则表达式能做什么
    # 可以定制一个规则,
    #1. 来确认某一个字符串是否符合规则
    #2. 从大段的字符串中找到符合规则的内容
    # 程序领域
    # 1.登录注册页的表单验证 web开发 要求简单语法
    # 2.爬虫
    # 爬虫 把这个网页下载下来 从里面提取一些信息,找到我要的所有信息,做数据分析
    # 3.自动化开发 日志分析

    # 什么是正则表达式 : 一种匹配字符串的规则

    # 明确一件事:
    # 正则表达式是一种独立的语法
    # 和python没关系


    # 帮助学习的工具 http://tool.chinaz.com/regex/

    # 元字符
    # 字符组 []
    # [^]
    # 字符组 []# 在一个字符的位置上能出现的内容
    # 非字符组[^] 在一个字符的位置上不能出现的内容

    # [1bc] 是一个范围
    # [0-9][A-Z][a-z] 匹配三个字符
    # [abc0-9] 匹配一个字符
    # [0-9a-zA-Z] 匹配一个字符



    # d == [0-9] 也表示匹配一个字符,匹配的是一个数字 #digit
    # w == [0-9a-zA-Z_] 也表示匹配一个数字字母下划线 #word
    # s == [ ] 包括回车 空格 和 制表符tab(tab在pycharm默认是4个空格,也可以自定义) #space
    # 匹配回车
    # 匹配制表符
    # D 匹配非数字
    # W 匹配非数字字母下滑线
    # S 匹配非空白

    # [dD] [wW] [sS] 匹配所有

    #  匹配边界 (边界不分前后) **很少用到
    # 例子: hello word
    # [] h o w d 都为边界
    # [o]代表o后面是边界
    # [w]这个匹配不到,代表w后面是边界

    # ^ 匹配字符串的开始,它只能出现在开头.
    # 除非[^abc]这种情况,^代表是非的情况,表示这里可以放除了abc的任意字符,例子ha[^abc]ss

    # $ 匹配字符串的结尾,它只能出现在结尾
    # 例子 hello hello hello
    # ^hello 只匹配开头的hello
    # $hello 只匹配结尾的hello
    # ^hello$ 匹配不上,只有一个hello的情况下才能匹配上.
    # ^[d][d]$ 匹配2位任意开头和结尾的数字,超过两位不行

    # a|b匹配字符a或字符b
    # | 或的关系,只要一个匹配到另一个就不会匹配
    # 如果出现了重合的情况:例子 ab|abc,必须把长度长的一方放在前面abc|ab,
    # 因为它读到了ab就默认匹配到了

    # . 代表可以匹配除了换行符( 回车)以外的任意字符
    #. 这种转义.代表除了.其他都不行


    # 量词{}
    # ? + *
    #结合贪婪匹配来考虑,贪婪匹配使用的是:回溯算法
    # {n},{n,},{n,m}

    # 特殊的用法和现象
    # ?的使用
    # 1. 在量词的后面跟了一个 ? 取消贪婪匹配 非贪婪(惰性)模式
    # ?? *? +? {n}?

    # 如果量词后面还有?表示取消贪婪匹配
    # ?? +? *? 这种取消贪婪匹配
    # 例子: 李莲英和李杰 李.{1,3}? 按最少的来匹配 #李莲
    # 例子:李莲英和 李.{1,3}?和 在能匹配上的情况下给你匹配尽量少的 #李莲英和

    # <.*>回溯算法找第一个:<一直匹配到最后,发现没有>,在往回走,找到了一个>结束
    # 例子 <abc>dasdsdadad<abc>sjjkkk 结果是<abc>dasdsdadad<abc>
    # 非贪婪匹配(惰性匹配):<.*?>
    # 例子 <abc>dasdsdadad<abc>sjjkk 结果是<abc>

    # {}只能约束前一个字符,输入{3}表示重复3次
    # 例子:d{3} 123三位 , dd{3} 1111四位,相当于d{3}是一组,d是一组
    # d{3,}叫贪婪匹配,表示重复至少3次 位数>3即可
    #d{3,5} 至少匹配3次,最多匹配5次,能多匹配就多匹配

    # ? 可以匹配也可以不匹配用?来表示 范围: 0 - 1
    # d? 代表前面这个字符匹配0次或者一次
    # d表示匹配一个字符,如果一个字符都没有的情况表示匹配不上,正常情况不会显示,
    # 如果/d?,没匹配上也算匹配上了,匹配了1次,如果什么都不输,匹配了1次,输入一个a,匹配了2次,都没有匹配上.(/d要求数字哦)

    # 例子:小知识点:假设我需要匹配2.3,4.6.8.8等等这种带小数的数据
    # # d.d这样可以
    # # 如果我需要这里既可以2.3也可以23那d.d这个就不行了,
    # # 1. d.d|dd 第一种解决方案
    # # 2. d.?d

    # + 表示重复一次或多次 范围: 1- 无穷大
    # d+

    # * 表示既可以不匹配又可以匹配任意多次 范围 : 0 - 无穷大
    # d*
    # 假设有一个需求既可以是整数又可以是小数
    # 2 或 2.345566778854333455
    # d.?d*
    # d.?d+ 这种只能匹配两位或两位以上,一位只有一个数就不行了

    # 最常用 .*?x 匹配任意字符直到找到一个x
    # ()分组的概念是把多个元字符,放进来变成一个元字符让量词来约束

    # 匹配15或18为的身份证号
    #方法一:用|来实现 ^[1-9]d{16}[0-9x]|^[1-9]d{14}
    #方法二:用()分组来实现 [1-9]d{14}(d{2}[1-9X])?


    #例子有一个数可能是整数可能是小数,必须存在
    # d+.?d* 这种情况会出现12.也会匹配到的问题
    # d+(.d+)? 这种可以完美解决上面的问题
    幻想毫无价值,计划渺如尘埃,目标不可能达到。这一切的一切毫无意义——除非我们付诸行动。
  • 相关阅读:
    23、mybatis学习——mybatis的二级缓存
    22、mybatis学习——mybatis的一级缓存
    21、mybatis学习——mybatis动态sql之<sql>抽取sql语句
    20、mybatis学习——<bind>绑定
    19、mybatis学习——mybatis的动态sql之<foreach>遍历传入的数组,集合和map
    18、mybatis学习——mybatis的动态sql之通过{<set>和<if>结合}或者{<trim>和<if>的结合}实现部分字段更新
    17、mybatis学习——mybatis的动态sql之<choose><when><otherwise>选择唯一条件
    16、mybatis学习——mybatis的动态sql之<if>、<where>和<trim>
    15、mybatis学习——鉴别器discriminator的使用
    [20181108]with temp as 建立临时表吗.txt
  • 原文地址:https://www.cnblogs.com/TodayWind/p/12081320.html
Copyright © 2020-2023  润新知