Python 如何根据匹配结果替换正则表达式(例如特殊函数)?

Python 如何根据匹配结果替换正则表达式(例如特殊函数)?,python,regex,Python,Regex,我有一个1-2组的搜索表达式 我需要用依赖于结果值的东西替换每个结果 e、 g.在以下字符串中,将每个匹配的数字替换为其值*3 s = 'a4cd5cd782cd' reg = '([1-9])cd' def f(x): return str(int(x)*3) 预期结果: 'a12cd15cd786cd' 如何用函数替换 谢谢看看re.sub()方法: (包括为每个找到的匹配调用回调方法的示例) 阅读 或 或者使用'0123456789'中的n的dic=dict((n,str(int(n

我有一个1-2组的搜索表达式

我需要用依赖于结果值的东西替换每个结果

e、 g.在以下字符串中,将每个匹配的数字替换为其值*3

s = 'a4cd5cd782cd'
reg = '([1-9])cd'
def f(x): return str(int(x)*3)
预期结果:

'a12cd15cd786cd'
如何用函数替换

谢谢

看看re.sub()方法:

(包括为每个找到的匹配调用回调方法的示例)

阅读

或者使用'0123456789'中的n的dic=dict((n,str(int(n)*3))


你真的想把最后的“2cd”>“6cd”相乘吗?还是你想要“782cd”->“2346cd”?还是应该完全跳过“782cd”,因为“cd”部分前有超过1个前导数字?有趣的是,即使是这样一个简单的练习也会变得复杂。
>>> import re
>>> s = 'a4cd5cd782cd'
>>> reg = r'([1-9])cd'
>>> def f(x): return str(int(x.group(1))*3)+"cd"
...
>>> re.sub(reg, f, s)
'a12cd15cd786cd'
import re

pat = re.compile('[1-9](?=cd)')

def f(x):
    return str(int(x.group())*3) 

s = 'a4cd5cd782cd'
print 'result   :',pat.sub(f,s)
print 'expected : a12cd15cd786cd'
import re

pat = re.compile('[1-9](?=cd)')

def g(x,dic = dict((str(i),str(3*i)) for i in xrange(10))):
    return dic[x.group()]

s = 'a4cd5cd782cd'
print 'result   :',pat.sub(g,s)
print 'expected : a12cd15cd786cd'
import re

pat = re.compile('[1-9](?=cd)')

def h(x, v = ('0','3','6','9','12','15','18','21','24','27') ):
    return v[int(x.group())]

s = 'a4cd5cd782cd'
print 'result   :',pat.sub(g,s)
print 'expected : a12cd15cd786cd'