Python 的 re 模块提供了re.sub用于替换字符串中的匹配项,该方法除了能将字符串中的匹配项替换成其他字符串,还可以使用函数来进行替换。
1 #!/usr/bin/python 2 # -*- coding: UTF-8 -*- 3 4 import re 5 6 7 def double(matched): # 定义函数double 8 print(matched) # 测试语句,打印matched的值 9 values = int(matched.group('value')) # 将语句相应的数组里面取到的值转换成整数类型后赋值给变量values,因为原先的值是str类型,要转换为整数后才能进行后面的乘法计算 10 print(values) # 测试语句,打印values的值 11 return str(values*2) # 将values的值乘以2后转换为字符串类型,如果不转换成字符串,在下面使用这个函数的替换字符串里面的值时候会报错 12 13 14 s = '23G4HFD567' # 定义一个字符串变量s 15 ss = re.search(r'(?P<name>d+)', s) # 定义变量ss,值是在字符串变量s中匹配数字,取匹配到的第一个值,d匹配数字,即0-9,后面的+符号是指将连续的数字当成一个匹配值 16 print(ss) # 测试语句,打印变量ss的值 17 print(ss.group('name')) # 通过数组名称name打印出对应的值,数组名称name是在上面的?P<name>中定义的 18 print("下面是使用double函数替换字符串中匹配的值") # 测试语句,打印一行字,方便查看打印结果 19 print(re.sub('(?P<value>d+)', double, s)) # 用double函数的值替换字符串s中对应的匹配项,也就是将字符串s中匹配到的所有数字乘以2
打印结果:
C:UsersAdministratorAppDataLocalProgramsPythonPython35-32python.exe C:/Users/Administrator/Desktop/mypython/test.py
<_sre.SRE_Match object; span=(0, 2), match='23'>
23
下面是使用double函数替换字符串中匹配的值
<_sre.SRE_Match object; span=(0, 2), match='23'>
23
<_sre.SRE_Match object; span=(3, 4), match='4'>
4
<_sre.SRE_Match object; span=(7, 10), match='567'>
567
46G8HFD1134
进程已结束,退出代码0
从打印结果中可以看出,替换的值是double这个函数时,传入double函数的参数matched的值是一个类似re.search方法的语句。