1 #正则表达式 - re #re模块 2 import re 3 # . 通配符,除换行符( )之外的符号 , .代表一个元素 4 # str1 = 'songqin' 5 # #re.findall() ,必填参数2个,第一个正则表达式,第二个是需求处理的字符串,还有一个缺省值 6 # res = re.findall('s.',str1) #findall,查找所有符合要求的内容,不止一个,用list存储,返回值是列表 7 # print(res) 8 9 # * ,*前面的元素可以出现0次或多次 10 str1 = 'songqin' 11 res = re.findall('s.*',str1) 12 print(res) 13 14 str1 = 'songqinsoo' 15 res1 = re.findall('so*',str1) 16 print(res1) #['so', 's'] 这个s后面的o可以出现0次或者多次 17 18 # +,+前面的元素至少出现一次或者多次 19 str1 = 'songqin' 20 res2 = re.findall('s.*',str1) 21 print(res2) 22 23 # ? ,组合用法:(.*?) (.+?) 24 #a123456b a(.*?)b 取出来的是123456 ,左右夹击 25 26 #w 匹配字母数字下划线 27 str1 = 'songqin' 28 res3 = re.findall('w',str1) 29 print(res3) 30 31 str2 = 'songqin' 32 res3 = re.findall('w{3}',str2) #['son', 'gqi'] 表示要3个连续的字母数字下划线组合 33 print(res3) 34 35 #W 匹配非字母数字下划线 36 str3 = 'songqin1231=' 37 res4 = re.findall('W',str3) 38 print(res4) 39 40 str3 = 'songqin1231=' 41 res4 = re.findall('W{3}',str3)#表示要3个连续的非字母数字下划线组合 42 print(res4) 43 #S 匹配任意非空字符 44 45 str11 = 'songq ' 46 res4 = re.findall('S',str11)#表示要3个连续的非字母数字下划线组合 47 print(res4) 48 #d 匹配任意数字,等价于[0-9] 49 50 str5 = 'songqin123aaa1=a' 51 res5 = re.findall('d.+d',str5) #把中间数字一起取出 52 print(res5) 53 54 str5 = 'songqin123a456aaaa' 55 res8 = re.findall('d+d',str5) #把中间数字一起取出 56 #两种方式输出结果 57 print(res8) 58 print(''.join(res8)) 59 60 #D 匹配任意非数字 61 str6 = '123aaasongqina331' 62 res6 = re.findall('D.+D',str6) #把中间数字一起取出 63 print(res6) 64 65 66 #^ 匹配字符串的开头 67 68 69 #$ 匹配字符串的末尾 70 71 72 73 74 75 #正则提取邮箱邮箱 76 import re 77 pattern = re.compile('w[-w.+]*@([A-Za-z0-9][-A-Za-z0-9]+.)+[A-Za-z]{2,14}') 78 str = u'1135384311@qq.com' 79 print(pattern.search(str)) 80 #身份证号 81 import re 82 pattern = re.compile('d{17}[d|x]|d{15}') 83 str = u'362204199410288416' 84 print(pattern.search(str)) 85 #手机号 86 import re 87 pattern = re.compile('^(13[0-9]|14[5|7]|15[0|1|2|3|4|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])d{8}$') 88 str31 = u'18702629780' 89 print(pattern.search(str31)) 90 91 #re模块常见方法 92 # re.compile(pattern[,flags]) 93 #用于编译正则表达式,生成一个正则表达式(pattern)对象,供match()和search()这两个函数调用 94 95 # 正则表达式re.findall()与re.finditer()的区别 96 #re.findall()如果可以匹配返回的是一个列表,re.finditer()返回的是一个迭代器,需要对其进行遍历,才能获取数据。 97 98 #re.split 能够匹配的子串将字符串切割后返回列表 99 100 # re模块修饰符 101 re.I #使匹配对大小写不敏感 102 re.S #使.匹配包括换行符在内的所有字符 103 104 str1 = 'songqinSo ' 105 res2 = re.findall('so*',str1,re.I | re.S) #re.I #使匹配对大小写不敏感 106 print(res2)