• 7.30_python_lx_day20


    一.正则表达式-单个字符的匹配

    import re

    finall(正则表达式,字符串)把符合正则表达式的字符串存在列表中返回

    re.findall

    (1)预定义字符集

    <1>d 匹配数字

    <2>D 匹配非数字

    <3>w 匹配字母数字下划线

    <4>W 匹配非字母数字下划线

    <5>s 匹配任意的空白符( '')

    <6>S 匹配任意非空白符

    <7> 匹配一个换行符

    <8> 匹配一个制表符

    <9> 匹配任意字符,除了换行符

    (2)字符组[  ]必须从字符组列举出来的字符当中抽取,默认一个,如果没有返回空

    代表到,代表的是范围

      0-9 0到9这么多的数字

      a-z => 26个小写字母

      A-Z=> 26个大写字母

      0-z  不会单纯的匹配小写大写字母和数字,还会匹配到特殊的符号,比如_和@

      ^ 除了 , 在字符组当中,开头的位置使用

    二.正则表达式-多个字符的匹配

    (1) ? 匹配0个或者1个 

    (2) + 匹配1个或者多个

    (3) * 匹配0个或者多个

    (4) {m,n} 匹配m个至n个a

      {1,3}  1 <= x <= 3

      {2,}  至少2次

      {2}  必须2次

    (5)贪婪匹配和非贪婪匹配

    贪婪匹配 :   默认向更多次数匹配(回溯算法)
    非贪婪匹配:   默认项更少次数匹配

    在量词的后面接?(非贪婪)
    .??   .+?   .*?   {4,}?

    回溯算法 : 从左向右进行匹配,直到匹配到最后,再也找不到了,回头,找最后一个(递归)

    (6)边界符 

     本身也是转义字符 : 退格(把光标向左移动一位)

    word
    右边界: d
    左边界: w

    (7)^  $  当使用^ 和 $ 符号的时候,要把字符串看成整体

    ^ 匹配字符串的开始(必须以... 开头)
    $ 匹配字符串的结尾(必须以... 结尾)

    三.正则表达式-匹配分组()

    (1)() 优先显示括号里面的内容

    (2)?: 取消显示括号里面的内容

    (3)| 代表或 , a|b 匹配字符a 或者 匹配字符b . 把字符串长的写在前面,字符串短的写在后面

    四.search 的用法

    findall 和 search 

    findall 是把所有符合条件的内容都匹配出来放到列表里
        不能够把匹配到的结果和分组当中的内容显示在同一个界面当中

    search 按照正则表达式,把第一次匹配到的内容返回出来,返回的是对象
        能够把匹配到的结果和分组当中的内容显示在同一个界面当中
    对象.group 返回的是匹配到的结果
    对象.groups 返回的是括号分组里面的内容

    如果匹配不到内容,返回的是None ,无法调用group 或者groups方法的

    五.命名分组 

    1 strvar = "<div>今天天气不错~</div>"
    2 lst = re.findall("<(.*?)>(.*?)<(.*?)>",strvar)
    3 print(lst)#[('div', '今天天气不错~', '/div')]

    (1)反向引用 : 在匹配到的值,在引用一次

    1 #1 把第一个小括号里面的内容,拿出来在匹配一下
    2 lst = re.findall(r"<(.*?)>(.*?)<(/1)>",strvar)
    3 print(lst)#[('div', '今天天气不错~', '/div')]

    (2)1 代表反向引用第一个括号内容  2代表反向引用第二个括号内容

    1 strvar = "a1b2cab"
    2 obj = re.search(r"(.*?)d(.*?)d(.*?)12",strvar)
    3 print(obj)

    (3)命名分组

    <1>(?P<组名>正则表达式) 给这个组起一个名字
    <2>(?P=组名) 引用之前组的名字,把该组名匹配到的内容放到当前位置

    1 strvar = "a1b2cab"
    2 obj = re.search(r"(?P<tag1>.*?)d(?P<tag2>.*?)d(?P<tag3>.*?)(?P=tag1)(?P=tag2)",strvar)
  • 相关阅读:
    MQTT的编译和安装(mosquitto)
    四、固件分析-固件逆向
    三、固件分析-固件提取
    二、硬件分析-电路分析
    一、硬件分析
    gdb调试
    AES加密中遇到的坑
    多线程中快速定位段错误位置
    理想的数据加密流程
    Centos进入单用户修改root密码
  • 原文地址:https://www.cnblogs.com/Magicianlx/p/13407488.html
Copyright © 2020-2023  润新知