match、search、sub、findall、compile区别

女生的网名这么多〃 提交于 2020-01-25 23:42:09

总结网络一些零碎知识,综合自己的理解:

 

函数名 原型 详解 返回类型 注意事项
re.match import re
re.match(pattern,string,flags)
pattern:正则表达式,匹配成功,返回一个Match,否则返回一个None
string:要匹配的字符串
flags:标志位,用于控制正则表达式的匹配方式,如是否区分大小写,多行匹配等等
返回一个_sre.SRE_Match对象,其有两个方法:group()
groups()
他只会去从字符串的开始与正则表达式做匹配;
并不会与字符串的所有字符进行匹配
re.search re.search(pattern,string,flags) 与match一模一样,唯一区别:
他会去匹配整个字符串,而match只会去匹配字符串的开始
groups():返回一个元组:(group(1),group(2)...)不包括group(0)
group():默认返回group(0)
对于一个string,无论其中有多少个被匹配上的字符串,他永远只返回第一个匹配上的字符串
re.sub re.sub(pattern,repl,string,count) pattern:正则表达式
repl:替换后的字符
string:要匹配的字符串
count:替换的个数,0代表所有
返回替换后的string  
re.findall re.findall(pattern,string,flag) pattern:正则表达式
string:要匹配的字符串
flag:标志位
总是返回一个list,如果未匹配到任何,则返回一个空list 与match和search不同的是:他会将一个字符串中所有的匹配到的目标均返回至列表中
e.compile re.compile(pattern,flag) flag:编译标识:
I  IGNORECASE  忽略大小写
M  MULTILINE  多行匹配 针对于^和$使用
S  DOTALL  .号将匹配所有字符
X  VERBOSE  将忽略规则表达式中的空白,若需要使用则需\+空白,同时允许使用'#'在规则表达式中作注释说明
flag使用方法:如,re.MULTILINE
多个flag可以使用'|'来分隔
对规格表达式进行预编译,返回一个pattern对象,可以使用这个pattern对象调用match和search等方法 这种方式对于需要做大量相同匹配的正则表达式可以大大提高效率

 

例子说明:

1.match && search && findall:

import re

stringA = 'abcdefgh,123asd,333'

matchA_failed = re.match('\d',stringA)
print type(matchA_failed) #None obj.
print matchA_failed #None 他只匹配首位

matchA_success = re.match('...',stringA)
print type(matchA_success) #_sre.SRE_Match obj.
print matchA_success #_sre.SRE_Match obj.
print matchA_success.group() #该对象存在2个方法group()和groups(),
print matchA_success.groups()


searchA_success = re.search('\d+',stringA)
print searchA_success.group() #search和match完全一样,区别仅仅是,search全字段匹配
#返回的均为匹配到的第一个,此处search仅返回123


findall_success = re.findall('\d+',stringA)
print findall_success
#与上述不同的是,他返回一个列表,这个列表中包含了所有匹配到的内容

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!