s = 'aaab2c1d3b4'
match()匹配开头,匹配到一个就返回
re.match('a;s) a
search(),匹配所有,匹配到就返回, [ ]代表范围
print(re.search('[0-9]',s)) 2
findall() 匹配所有,找到全部,返回列表
print(re.findall('[0-9]',s)) ['2', '1', '3', '4']
'.'匹配任意字符,匹配几个就写几个.
print(re.search('..',s)) aa
'^'匹配开头,效果和macth一样 A
print(re.search('^aaa',s)) print(re.match('aaa',s)) aaa aaa
'$'匹配结尾
print(re.search('4$',s)) 4
'*' 匹配*号前的开头字符0次或者多次,如果匹配一个字符,则从开头查找,如果是多个字符,则多个同时查找
print(re.search('cc1*','1aa1aab1bbc1cc111').group) cc111
'+'匹配前面一个字符1次或者多次,查找全部
print(re.search('z+','aabb111123daaaa1aazzabbzd')) zz
'?' 匹配一个字符0次或1次
print(re.search('az?','vazzzzZzyiqunz')) az
{m},匹配一个字符,连续匹配到多少次,
print(re.search('a{3}','1bbbvvvaaaa')) aaa
{n,m} 匹配一个字符n到m次,默认按匹配最大的匹配,如果最大的没有,就依次匹配小一次
print(re.search('[a-z]{1,3}','1zheng')) zhe
| 匹配左边或者右边的字符,一个匹配到就返回
print(re.search('[Z|z]heng','Zheng')) Zheng
'(...)'分组匹配,需要配合groups使用
print(re.search('(D+)(d+)','zheng123').groups()) ('zheng', '123')
d+ 匹配数字,相当于[0-9]+ 匹配任意多个数字,贪婪模式
print(re.search('d+','ascasd1321654132d')) 1321654132
D 匹配非数字
print(re.search('D+','deasq2c123')) deasq
A 只匹配开头,效果和^ match 效果一样
print(re.search('Aaaa','aaa112av')) aaa
w匹配[A-Za-z0-9]
print(re.search('w+','asdasd12312asd*asd+')) asdasd12312asd
W匹配非[A-Za-z0-9]
print(re.search('W+','asdasd123/!*12asd*@asd+')) /!*
'(?P<name>)'分组匹配
s = '360281199206240010' res = re.search('(?P<sheng>d{3})(?P<city>d{3})',s) print(res.groupdict()) {'sheng': '360', 'city': '281'}
split 和findall功能相反
print(re.split('D+',s)) print(re.findall('D+',s)) ['', '2', '1', '3', '4'] ['aaab', 'c', 'd', 'b']
分隔字符,maxsplit 分隔几次
s = '123,3123,asdasd,234234' print(re.split(',',s,maxsplit=2)) ['123', '3123', 'asdasd,234234']
fullmatch匹配全部
print(re.fullmatch('123','123')) print(re.fullmatch('w+@w+.(com|cn|edu)','493791411@qq.com')) 123 493791411@qq.com
通过先定义匹配规则,然后在进行匹配,这样如果有大量匹配的时候,效率很高
ress = re.compile('w+@w+.(com|cn|edu)') print(ress.match('493791411@qq.com'))