我需要一个从regex取替换模式的dictionary。我编写了以下代码,但是该模式被替换为function object而不是替换值。

>>> import re
>>> d1 = {'a':'1'}
>>> d2 = {'w':'2','k':'2'}
>>> re.sub(r'(a)([wk])', '%s%s' %(lambda m:d1[m.group()[0]], lambda m:d2[m.group()[1]]), 'waka')
'w<function <lambda> at 0x7f1e281efc08><function <lambda> at 0x7f1e281efcf8>a'


预期输出为'w12a'

最佳答案

因为:

>>> import re
>>> '%s%s' %(lambda m:d1[m.group()[0]], lambda m:d2[m.group()[1]])
'<function <lambda> at 0x0000000002AB0128><function <lambda> at 0x0000000002AB0198>'

您正在传递上述字符串作为替换字符串。
使用替换功能如下:
>>> import re
>>> d1 = {'a':'1'}
>>> d2 = {'w':'2','k':'2'}
>>> re.sub(r'(a)([wk])',
...        lambda m: d1[m.group(1)] + d2[m.group(2)],
...        'waka')
'w12a'

关于python - 为什么我的正则表达式用功能对象而不是替换值替换匹配模式?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31084400/

10-12 22:05
查看更多