1 #正则表达式 - re #re模块
2 import re
3 # . 通配符,除换行符(\n)之外的符号 , .代表一个元素
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\n'
105 res2 = re.findall('so*',str1,re.I | re.S) #re.I #使匹配对大小写不敏感
106 print(res2)