findall 返回列表 找所有的匹配项
search 匹配就返回一个变量,通过group取匹配到的第一个值,不匹配就返回None,group会报错
match 相当于search的正则表达式中加了一个'^'
spilt 返回列表,按照正则规则切割,默认匹配到的内容会被切掉
sub/subn 替换,按照正则规则去寻找要被替换掉的内容,subn返回元组,第二个值是替换的次数
compile 编译一个正则表达式,用这个结果去search match findall finditer 能够节省时间
finditer 返回一个迭代器,所有的结果都在这个迭代器中,需要通过循环+group的形式取值 能够节省内存
- findall 匹配所有,匹配到的元素放入列表中
re_findall = re.findall('\d+', '我今年18岁明年我就19岁了')
print(re_findall)
结果:
['18', '19']
- search 只匹配从左到右的第一个,得到的不是直接的结果,而是一个变量,通过这个变量的group方法来获取结果.如果没有匹配到,会返回None,使用group会报错.
ret = re.search('\d+','周伦今年40岁了,结婚差不多20年了')
print(ret) # 内存地址,这是一个正则匹配的结果
print(ret.group()) # 通过ret.group()获取真正的结果
结果:
<_sre.SRE_Match object; span=(4, 6), match='40'>
40
ret = re.search('\d+','我是一个程序员 666')
if ret : # 内存地址,这是一个正则匹配的结果
print(ret.group()) # 通过ret.group()获取真正的结果
结果:
666
- match 从头开始匹配,匹配到符合的就马上返回
ret = re.match('\d','928')
print(ret.group())
结果:
9
- split 返回列表,按照正则规则切割。
s = 'will|wilson|william'
print(s.split('|'))
s = 'alex83taibai40egon25'
print(re.split('\d+',s))
结果:
['will', 'wilson', 'william']
['alex', 'taibai', 'egon', '']
- sub/subn 替换
sub = re.sub('不', '就', '我不是一个程序员,不会敲代码')
print(sub)
sub = re.sub('不', '就', '我不是一个程序员,不会敲代码',1)
print(sub)
# subn 返回一个元组,第二个元素是替换的次数
subn = re.subn('不', '就', '我不是一个程序员,不会敲代码')
print(subn)
结果:
我就是一个程序员,就会敲代码
我就是一个程序员,不会敲代码
('我就是一个程序员,就会敲代码', 2)
- compile 预编译
ret = re.compile('\d+') # 完成编译
findall = ret.findall("alex83taibai40egon25")
print(findall)
search = ret.search("alex83taibai40egon25")
print(search)
print(search.group())
结果:
['83', '40', '25']
<_sre.SRE_Match object; span=(4, 6), match='83'>
83
- finditer 节省你使用正则表达式解决问题的内存
ret = re.finditer("\d+","alex83taibai40egon25")
for i in ret:
print(i.group())
结果:
83
40
25