10-11 re.sub正则替换
# 10-11 re.sub正则替换
# 正则表达式中,并不是仅仅只有re一个模块,本章介绍re.sub
# 看例子
# re.findall用于查找,今天所讲的re.sub用于替换
import re
lanuage = 'pythonC#javaphp'
r = re.sub('C#','GO',lanuage)#注意re.sub的几个参数的意义
print(r)
# 打印结果如图1
import re
lanuage = 'pythonC#javaC#phpC#'
r = re.sub('C#','GO',lanuage,0)#注意re.sub的0的意义表示无限制的匹配下去,不管多少C#,全部都会被替换
print(r)
# 打印结果如图2
import re
lanuage = 'pythonC#javaC#phpC#'
r = re.sub('C#','GO',lanuage,1)#注意re.sub的1的意义表示只有字符串中第一个C#会被替换
print(r)
# 打印结果如图3
# 看看下面的替换方法
import re
lanuage = 'pythonC#javaC#phpC#'
lanuage.replace('C#','GO')
print(lanuage)
# 打印结果如图4,发现并没有实现替换!原因是字符串是不可变得,lanuage.replace('C#','GO')需要接收一下变量
# lanuage = lanuage.replace('C#','GO')即可
# re.sub强大的地方是第二个参数可以是个函数:看下面例子
import re
lanuage = 'pythonC#javaC#phpC#'
def convert(value):
pass
r = re.sub('C#',convert,lanuage)
print(r)
# 打印结果如图5,C#消失不见了,是因为被函数里的空字符串替代了
# 继续看例子
import re
lanuage = 'pythonC#javaC#phpC#'
def convert(value):
return '!!' + value + '!!'
r = re.sub('C#',convert,lanuage)
print(r)
# 打印结果如图6,出现了报错,下面分析一下报错的原因:
import re
lanuage = 'pythonC#javaC#phpC#'
def convert(value):#字符串并不会直接传到convert里面
print(value)
#return '!!' + value + '!!'
r = re.sub('C#',convert,lanuage)
print(r)
# 打印结果如图7
# 看看正确的代码:
import re
lanuage = 'pythonC#javaC#phpC#'
def convert(value):#字符串并不会直接传到convert里面
matched = value.group()#拿到匹配结果
return '!!' + matched + '!!'
r = re.sub('C#',convert,lanuage)
print(r)
# 打印结果如图8,成功打印
01.jpg
02.jpg
03.jpg
04.jpg
05.jpg
06.jpg
07.jpg
08.jpg
网友评论