2016-04-12 6 views
1

Wörterbuchsuche mit Schlüssel als ein angepaßtes Gruppe in Python re.sub ModulWörterbuchsuche mit Schlüssel als ein angepaßtes Gruppe in Python re.sub Modul

Solution1: ============= === Doesnt Arbeit ================

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

Solution2: ==================== ===== Funktioniert !!! ==========

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 

Wie funktioniert Solution1?

+0

Warum nicht Lambda, Problem? –

+0

können Sie nicht .. bei 2 bleiben. –

+0

'\ 1' funktioniert, wenn es mit Strings kombiniert. Bei der Suche nach Diktaten müssen Sie die anonyme Funktion verwenden. –

Antwort

1

Hinweis Python ist nicht wie Perl, die Rückverweise werden nicht als Umgebungsvariablen verwendet, wenn Sie Regex mit Erfassungsgruppen verwenden.

Nur der Lambda-Code funktioniert und es gibt keine Möglichkeit, eine Rückreferenz auf die gleiche Weise zu bearbeiten.

Der Grund ist offensichtlich: nur re.sub weiß, was \1 bezieht sich auf die dict1 hat keine Ahnung, was \1 Punkte. Sie übergeben das Muster mit einer Erfassungsgruppe an die re.sub, sodass diese Methode die Verwendung einer Ersatzmusterzeichenfolge ermöglicht, die Rückreferenzen enthalten kann. Sie übergeben kein Muster/Regex an das Wörterbuch (eigentlich können Sie nicht), also gibt es keine Möglichkeit, eine Regex-Rückreferenz zu verwenden, um einen Wörterbuchwert zu erhalten.

Verwandte Themen