2016-04-12 38 views
1

字典查找与密钥作为在python应用re.sub模块字典查找与密钥作为在python应用re.sub模块

解决方法1匹配组匹配的组:============= ===不工作================

dict1={} 
dict1['indu']='sharma' 
dict1['abhi']='dutta' 
text='agan !abhi !indu Saikat' 
text=re.sub('!(\w+)',dict1[r'\1'], text) 
print text 

解决方案2:==================== ===== Works !!! ===========

dict1={} 
dict1['indu']='sharma' 
dict1['abhi']='dutta' 
text='agan !abhi !indu Saikat' 
text=re.sub('!(\w+)',lambda x: dict1[x.group(1)], text) 
print text 

如何使Solution1工作?

+0

为什么不是lambda,问题? –

+0

你不能......坚持2. –

+0

'\ 1'当它与字符串结合时工作。在查词典时,你必须使用匿名函数。 –

回答

1

注意Python与Perl不同,反向引用不会用作使用正则表达式和捕获组时的环境变量。

只有lambda代码可以工作,并且没有办法使反引用以同样的方式工作。

原因很明显:只有re.sub知道\1是指什么,dict1不知道\1指向什么。您将捕获组的模式传递给re.sub,因此,此方法允许使用可包含反向引用的替换模式字符串。您不会将任何模式/正则表达式传递给字典(实际上,您不能),因此无法使用正则表达式反向引用来获取某些字典值。