2016-04-12 40 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,因此,此方法允許使用可包含反向引用的替換模式字符串。您不會將任何模式/正則表達式傳遞給字典(實際上,您不能),因此無法使用正則表達式反向引用來獲取某些字典值。