day26 re正则表达式

Posted 何必从头

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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(rabc)     # 制作匹配规则
 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      # 空白字符[<空格>\t\r\n\f\n]
 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 \Z      # 仅匹配字符串末尾,注意转义字符
 53 \b      # 匹配\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(ra(?=\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(rabc, 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

 

以上是关于day26 re正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

python—day17 正则表达式 re模块

day19——常用正则表达式re正则对象和正则匹配效率比较编译正则对象

day5-正则表达式 re

Python开发基础-Day14正则表达式和re模块

day5模块学习--re正则模块

day5模块学习--re正则模块