2016-04-12 11 views
1

辞書引き辞書検索

解決法1:============= === doesntの仕事================

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

対処方法2:==================== =====作品!!! ===========

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

なぜラムダ問題? –

+0

あなたは.. 2に固執することはできません。 –

+0

'\ 1'は文字列と組み合わせて動作します。あなたは匿名関数を使う必要があります。 –

答えて

1

メモPythonはPerlと似ていませんが、キャプチャグループでregexを使用する場合、バックリファレンスは環境変数として使用されません。

ラムダコードだけが動作し、同じ方法で逆参照を行う方法はありません。理由は明らかです:re.sub\1が何を指しているかを知っており、dict1は何を指しているのですか\1は指摘していません。キャプチャグループを含むパターンをre.subに渡すので、この方法では、逆参照を含むの置換パターン文字列を使用することができます。任意のパターン/正規表現を辞書に渡すことはありません(実際にはできません)。正規表現の逆参照を使用して辞書の値を取得する方法はありません。