re模块、分组在re模块的使用
一、re模块
1、findall(" 正则表达式","str" )
1 import re 2 s="sdsa1212dasda212sa2d" 3 ret=re.findall("\d+",s) 4 print(ret)
结果返回一个列表
2、search(" 正则表达式","str" )
1 ret=re.search("\d+",s) #匹配字符串中第一个出现的符合表达式的结果(不一定在开头) 2 print(ret.group())
返回结果用.group查看
3、match("正则表达式","str")
1 ret=re.match("\d+",s) #字符串的开头必须是符合正则表达式的 否则返回None 2 print(ret)
4、split 切割
1 ret=re.split("\d+",s) #从符合表达式的位置切,返回的是列表 2 print(ret)
5、compile("正则表达式"),将正则表达式进行一次编译,可以多次使用编译结果
1 ret=re.compile("\d+") ret作为编译结果直接使用 2 res=ret.findall(s) #直接使用正则表达式的编译结果 3 print(res)
6、finditer("\d+",str) 返回一个迭代器,节省内存
1 ret=re.compile("\d+") 2 res=ret.finditer(s) 3 for i in res: 4 print(i.group())
二、分组在模块中的使用
1、findall( ) :优先返回在( )里的内容,如果都加括号,则返回一个装在列表里的元组,否则把优先的匹配结果放在元组里返回一个列表
1 s = '<a>wahaha</s>' 2 ret = re.findall('<(\w+)>(\w+)</\w+>',s)
2、search():单个优先没有作用,全部的正则表达式加( )后根据 .group(1,2,3)选择的返回哪一组优先
s = '<a>wahaha</s>' ret = re.search('<(\w+)>(\w+)</(\w+)>', s) print(ret.group()) print(ret.group(1)) print(ret.group(2)) print(ret.group(3))
3、split():当正则表达式加上() 后会把切割的字符也一起返回一个列表里
1 s = '<a>wahaha</s>' 2 ret = re.split('(\d+)','alex83taibai40egon25') 3 print(ret)
4、分组命名:(?P<这个组的名字>正则表达式) print(ret.group('con'))
1 s = '<a>wahaha</a>' 2 ret = re.search('>(?P<con>\w+)<',s) 3 print(ret.group(1)) 4 print(ret.group('con'))
1 s = '<a>wahaha</a>' 2 pattern = '<(\w+)>(\w+)</(\w+)>' 3 ret = re.search(pattern,s) 4 print(ret.group(1) == ret.group(3))
5、使用前面的分组 要求使用这个名字的分组和前面同名分组中的内容匹配的必须一致
1 pattern = '<(?P<tab>\w+)>(\w+)</(?P=tab)>' 2 ret = re.search(pattern,s) 3 print(ret)