python中re模块下的sub方法替换字符串匹配值为函数

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方法的语句。

原文地址:https://www.cnblogs.com/xzy186/p/14267498.html