其他的内容在代码中有详细的注释,大家可以复制我的代码一步一步运行然后实验
以下的内容有:split sub subn math,compile,finditer
# split sub subn math,compile,finditer
# split
res = re.split('d+', "cyx123456cyxx")
print(res) # --> ['cyx', 'cyxx']
res = re.split('(d+)', "cyx123456cyxx") # 保留分组
print(res) # --> ['cyx', '123456', 'cyxx']
# sub 替换
res = re.sub('d+', '我把数字替换了',
"cyx123456cyxxx123456") # 默认全部替换,当然也可以替换一次re.sub('d+','我把数字替换了',"cyx123456cyxxx123456",1)
print(res) # --> cyx我把数字替换了cyxxx我把数字替换了
# subn 替换了并显示替换的次数
res = re.subn('d+', '我把数字替换了', "cyx123456cyxxx123456")
print(res) # --> ('cyx我把数字替换了cyxxx我把数字替换了', 2)
# match 这个就相当与加了个^ (和search差不多) --> 主要用来规定这个字符号必须是什么样的
res = re.match('d+', 'cyx123456cyxxx')
print(res) # --> None
res = re.match('d+', '123cyx456cyxxx')
print(res.group()) # --> 123
# compile -- 节省代码的时间的工具
# 假如同一个正则表达式要被使用多次
# 节省了多次解析同一个正则表达式的时间
ret = re.compile("d+")
res = ret.search("cyx12456cyxXX123")
print(res.group()) # --> 12456
# finditer --> 节省空间
ret = re.finditer("d+", "cyx123456cyxxx125644")
for r in ret:
print(r.group()) # --> 123456
# 125644
# 怎么又节省时间又节省空间呢?
ret = re.compile('d+')
res = ret.finditer("cyx222231fddsf45746sdf2123sdf56456sdf10123sdf123132sdf")
for r in res:
print(r.group())
"""
222231
45746
2123
56456
10123
123132
"""
# 分组命名(?P<组名>正则) (?P=组名)
# 有的时候我们要匹配的内容是包含在不想要的内容之中的,
# 只能先把不想要的内容匹配出来,然后再想办法从结果中去掉
# 分组命名的用法 (找两个组里面是一样的内容)
exp = '<abc>asdasf54545645698asdasd</abc>00545sdfsdf</abd>'
ret = re.search('<(?P<tag>w+)>.*?</(?P=tag)', exp)
print(ret) # -- > <re.Match object; span=(0, 33), match='<abc>asdasf54545645698asdasd</abc'>
# exp2:
import re
ret = re.search('d(d)d(w+?)(d)(w)d(d)d(?P<name1>w+?)(d)(w)d(d)d(?P<name2>w+?)(d)(w)',
'123abc45678agsf_123abc45678agsf123abc45678agsf')
print(ret.group('name1')) # -- > agsf_123abc
print(ret.group('name2')) # -- > agsf
今日小思考
当我们有一个这样的列表:
lis = ['', 'z', 'c', 'asd', 'sdf', '', 'asd']
那么我们如何将里面的空字符删除呢?
ret = filter(lambda n: n, lis) print(list(ret)) # --> ['z', 'c', 'asd', 'sdf', 'asd']
总结









