import re ''' .代表通配符,除了 不能匹配外,其它全部都能匹配,一个点代表一个字符 ^代表字符串开头进行匹配,只能放在最前面 $代表字符串结尾进行匹配,只能放在最后面 *代表0到无穷次 +代表1次到无穷次 ?代表0次到1次 {}代表自行控制多少次,{0,} == *,{1,} == +,{0,1} == ?,{6}代表6次,{1,6}代表1,2,3,4,5,6次 *****注意:前面的*,+,?等都是贪婪匹配,也就是尽可能多的匹配;后面加?号使其变成惰性匹配,比如*?匹配0个,+?匹配1个***** []代表字符集,或的作用; ''' # .代表通配符,除了 不能匹配外,其它全部都能匹配,一个点代表一个字符 # print(re.findall('a..x', 'fialexskdlfjaghx')) # ^代表字符串开头进行匹配,只能放在最前面 # print(re.findall('^b.*b$', 'bslkafdsallkb')) # print(re.findall('^abc', 'abcsss')) # $代表字符串结尾进行匹配,只能放在最后面 # print(re.findall('.+b$', 'asdfb')) # *代表0到无穷次 # print(re.findall('abc*', 'abcccccbbabc')) # print(re.findall('a*', 'abakjalaaoaaia')) # 结果为['a', '', 'a', '', '', 'a', '', 'aa', '', 'aa', '', 'a', ''],*代表0到无穷次,那么不是a也代表匹配上了,因为0它也取,只不过为空 # print(re.findall('d*$', 'dddlslslsdddd')) # print(re.findall('^d*', 'dddlslslsdddd')) # +代表1次到无穷次 # print(re.findall('alex*', 'asddsaale')) # *代表0到无穷次,那么x可以没有,所以ale可以取出来 # print(re.findall('alex+', 'asddsaale')) # +代表1到无穷次,那么x最少要有一个,所以alex取不出来 # ?代表0次到1次 # print(re.findall('alex?', 'asddsafale')) # print(re.findall('alex?', 'asddsalexxxxxxf')) # {}代表自行控制多少次,{0,} == *,{1,} == +,{0,1} == ?,{6}代表6次,{1,6}代表1,2,3,4,5,6次;*****大括号里的逗号不能有空格***** # print(re.findall('alex{0,}', 'ahskalefdsfd')) # print(re.findall('alex{1,}', 'ahskalexxxfdsfd')) # print(re.findall('alex{2,4}', 'alexxfkdjalexxxfkdialexjaleiialexxxx')) # print(re.findall('alex{3}', 'alexxxxx')) # 惰性匹配--->*?匹配0个,+?匹配一个 # print(re.findall('alex*?', 'ale')) # print(re.findall('alex*?', 'alex')) # print(re.findall('alex*?', 'alexxxx')) # print(re.findall('alex+?', 'ale')) # print(re.findall('alex+?', 'alex')) # print(re.findall('alex+?', 'alexxxx')) # []代表字符集,或的作用 # print(re.findall('www[baidu,]', 'wwwbwwwawwwiwwwdwwwuwww,')) # 里面的每一个字符都当作一次匹配,包括逗号:['wwwb', 'wwwa', 'wwwi', 'wwwd', 'wwwu', 'www,'] # print(re.findall('[abc.*+]', 'aa.bs*cs+')) # ['a', 'a', '.', 'b', '*', 'c', '+'] # 在字符集里有功能的符号:- ^ # print(re.findall('[a-z]', '123abc456qweRTY')) # 代表小写字母a-z # print(re.findall('[A-Z]', '123ABC456QWErty')) # 代表大写字母A-Z # print(re.findall('[0-9]', '001122q3w4e5A6S7D89')) # 代表数字0-9 # print(re.findall('q[^a-z]', 'qaqbqcqdqeqfq0q1qAq.q*q!q')) # 非,除小写字母a-z以外的都匹配 # *****print(re.findall('([^()]*)', '12+(34*6+2-5*(2-1))')) # *****计算器作业---提取括号里的表达式---没有理解透到底怎么回事,需重新复习理解***** ''' 元字符之转义符 反斜杠后边跟元字符去除特殊功能,比如. 反斜杠后边跟普通字符实现特殊功能,比如d d 匹配任何十进制数;它相当于类 [0-9]。 D 匹配任何非数字字符;它相当于类 [^0-9]。 s 匹配任何空白字符;它相当于类 [ fv]。 S 匹配任何非空白字符;它相当于类 [^ fv]。 w 匹配任何字母数字字符;它相当于类 [a-zA-Z0-9_]。下划线也可以匹配到 W 匹配任何非字母数字字符;它相当于类 [^a-zA-Z0-9_] 匹配一个特殊字符边界,比如空格,&,#等 ''' # print(re.findall('d+', '1a2b34c56d78f90g')) # print(re.findall('D+', '1a2b34c56d78f90gw')) # print(re.findall('s+', ' abc 123')) # print(re.findall('S+', ' abc 123')) # print(re.findall('w+', '12,ab.00*cd?你好@')) # print(re.findall('W+', '12,ab.00*cd?你好@')) # print(re.findall('www.baidu.com', 'www.baidu.com')) # 如果不加转义符,后面的除了 不能匹配外,其它都能匹配到 print(re.findall('I', 'I am LIST')) # ['I', 'I'] print(re.findall('^I', 'I am LIST')) # ['I'] print(re.findall('^I', 'hello I am LIST')) # [] print(re.findall('I', 'hello I am LIST')) # [] print(re.findall(r'I', 'hello I am LIST')) # ['I'],r=rawstring,原生字符串,不做任何转义 print(re.findall('I\b', 'hello I am LIST')) # ['I'] print(re.findall('c\\l', 'abcle')) # l<--->re模块\l<--->python解释器\\l;结果['c\l'],其实是一个,但是python又一次转义多加了一个 print(re.findall(r'c\l', 'abcle')) # l<--->re模块\l<--->python解释器\l