zoukankan      html  css  js  c++  java
  • day26 re正则表达式

     Python之路,Day14 = Python基础14

      1 compile()
      2 match()
      3 search()
      4 findall()
      5 
      6 m.group()  # 括号里面剋跟参数,表示打印里面(分组)的第几个元素(索引从1开始)   需要测试下
      7 
      8 
      9 a = re.compile(r'abc')     # 制作匹配规则
     10 a.search('abcdefghijk')    # a是一个对象
     11 
     12 match   # 从第一个开始匹配
     13 findall  # 找出所有符合规则的
     14 search  # 从前往后开始寻找
     15 
     16       元字符
     17 .       # 除换行符的任意字符
     18        # 转义字符
     19       # re 模块是 python 调用的一个 小型语言,如果 规则里面有 \ 的话,
     20       # python 解释器在读取的时候,就会先把它转成  去掉特殊意义,
     21       # 但是 re 里面还是需要转化  的特殊意义,所以,需要 \\ 来使用
     22       # 经过 python 的时候,变成了 \, 到 re 里面,就变成了 ;
     23 [...]   # 字符集合
     24     
     25 d      # 数字[0-9]
     26 D      # 非数字[^0-9]
     27 s      # 空白字符[<空格>	
    f
    ]
     28 S      # 非空白字符[^s]
     29 w      # 单字字符[A-Za-z0-9]
     30 W      # 非单词字符[^w]
     31 
     32        数量词字符
     33 *       # 匹配前0个字符1次或者多次 
     34 +       # 匹配前一个字符1次或者多次 
     35 ?       # 匹配前一个字符0次或者1次
     36 {m}     # 匹配前一个字符m次
     37 {m,n}   # 匹配前一个字符m至n次
     38 数量词?# 变成非贪婪模式(默认为贪婪模式,尽可能的匹配多的次数)
     39 
     40 ^
     41 '^[abc]'        # 以a或b或c开头的
     42 '[^abc]'        # 非a、b、c
     43 
     44 
     45         边界字符
     46 ^       # 匹配字符串开头,多行匹配每一行开头
     47     '^[abc]'        # 以a或b或c开头的
     48     '[^abc]'        # 非a、b、c
     49 
     50 $       # 匹配字符串末尾,多行匹配每一行末尾
     51 A      # 仅匹配字符串开头,注意转义字符
     52       # 仅匹配字符串末尾,注意转义字符
     53       # 匹配w和W之间,注意转义字符
     54 
     55 
     56         逻辑、分组
     57 |       #
     58     ret = findall("www.(?:w+).(?:com|cn)")
     59             # findall  默认只显示 分组的信息(括号里面的), 加了 ?: 那么就取消优先级啊(打印所有)
     60             #  |  两个要用 括号 括起来
     61             
     62 (...)   # 匿名分组
     63         a = re.compile('(a)b(c)')
     64         a.match('abcdefg')
     65         a.groups()      # 分组匹配。会打印出一个元组,符合规则a的为第一个元素,符合规则c的为第二个元素,如果后面的规则也有括号的话,依次变为元素
     66         
     67         
     68 (?P<name>...)       # 除了分组外还替该组制定一个 name 的别名
     69         p = re.compile('(?P<name>a)b(c)')
     70         a = p.match('abcdef')
     71         a.group('name')   # 可以把这个对应的元素取出来
     72         a.groups()
     73         a.groupdict()
     74         
     75 
     76 <number>           # 引入编号为<number>的分组匹配到的字符串
     77         p = re.compile(r'(?<name>a)b(c)1')    # 注意 1 前面的  ,不加 r ,会被当成转义字符,可以写两个 
     78         # 1 像当与在这个位置引用了前面第一个的那个规则(分组里面的第一个),同样,不会被写入到分组中
     79         p.match('abcdef')
     80         a.groups()
     81         a.groupdict()
     82 
     83 
     84 (?P=name)           # 引用别名为<name>的分组匹配到的字符串
     85         p = re.compile('(?<name>a)b(c)(?P=name)')
     86         # (?P=name) 相当于在这个位置引用了前面那个 名字叫 name 的这个规则,虽然这里有括号,但是它只会匹配到,不会放入分组中
     87         p.match('abcdef')
     88         a.groups()
     89         a.groupdict()
     90 
     91 
     92 
     93         特殊构造
     94 (?:...)         # (...) 不分组版本,虽然在括号里面,但是不进行分组
     95 (?#...)         # #号后面的内容将作为注释
     96 (?=...)         # 后面的限定词满足 ... 条件
     97         re.compile(r'a(?=d)')        # 匹配前面是a,后面是数字的内容,得到的结果显示出a,不显示后面的数字
     98 (?!...)         # 后面的限定词不满足 ... 条件
     99 (?<=...)        # 前面的限定词满足 ... 条件
    100 (?<!...)        # 前面的限定词不满足 ... 条件
    101 (?(id/name) yes |no)        # 
    102                 # re.compile(r'(d)?abc(?(1)d|abc)')    
    103                     # 匹配规则为  (d)?abc ,有分组; 
    104                     # (?(1)d|abc) 前面 分组里面位置为 1 的规则,可以是数字,也可以是 abcdef
    105 
    106 
    107             正则表达式开关
    108 忽略大小写:
    109     可以写成:re.compile(r'(?i)abc')
    110     开关模式:re.compile(r'abc', re.I)       # 推荐
    111 
    112     
    113 sub
    114     p = re.compile(r'(w) (w)')
    115     s = 'hi you, good boy'
    116     print(p.sub(r'2 1', s)
    117     >>> you hi, boy good
  • 相关阅读:
    只出现一次的数字
    SpringBoot整合Redis
    MFC 0误差画图
    模仿.NET的序列化机制
    求最大子数组
    让CFrameWnd派生类的对象响应鼠标消息的“变态”方法
    关于chm文件和'#'的惊人发现
    CxImage学习笔记
    C++指针系列
    MFC,C++ 截屏
  • 原文地址:https://www.cnblogs.com/alwaysInMe/p/7082023.html
Copyright © 2011-2022 走看看