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