Ich möchte aus einem String verschiedene genau vorher definierte Zeichen ersetzen.
Für mich der einfachste Weg :
Code: Alles auswählen
text = 'Sydney(AUS) - Rio de Janeiro(Bra) - Madryt/Spain - AUS - Monteral/CAN(CAN) - Lion(FRA)'
temp = text.replace('(AUS)', '')
temp = temp.replace('(Bra)', '')
temp = temp.replace('(CAN)', '')
temp = temp.replace('(FRA)', '')
temp = temp.replace('/Spain', '')
temp = temp.replace('/CAN', '')
temp = temp.replace('AUS', '')
temp = temp.replace('Lion', 'Lyon')
temp = temp.replace('Madryt', 'Madrid')
temp = ' '.join(temp.split())
temp = temp.replace('- -', '-')
print '=> replace() : {}'.format(temp)
# [OUT] => replace() : Sydney - Rio de Janeiro - Madrid - Monteral - Lyon
Aber wie mach ich das, wenn ich, sagen wir einmal 100.000 mögliche replacements habe ?
100.000x replace( ... ) untereinander schreiben ???
Ein möglicher Lösungsansatz ist für mich gewesen :
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: utf8 -*-
#
import re
class Multiple_Replaces(object):
def __init__(self):
# http://stackoverflow.com/questions/6116978/python-replace-multiple-strings
replacements = { '(AUS)' : '',
'(Bra)' : '',
'(CAN)' : '',
'(FRA)' : '',
'/CAN' : '',
'Lion' : 'Lyon',
'/Spain' : '',
'Madryt' : 'Madrid' }
self.decode = dict((re.escape(k), v) for k, v in replacements.iteritems())
self.pattern = re.compile("|".join(self.decode.keys()))
def text(self, text):
return self.pattern.sub(lambda m: self.decode[re.escape(m.group(0))], text)
mr = Multiple_Replaces()
text = 'Sydney(AUS) - Rio de Janeiro(Bra) - Madryt/Spain - AUS - Monteral/CAN(CAN) - Lion(FRA)'
temp = mr.text(' '.join(text.split()))
print '=> Multiple_Replace() : {}'.format(temp)
# [OUT]=> Multiple_Replace() : Sydney - Rio de Janeiro - Madrid - AUS - Monteral - Lyon
Code: Alles auswählen
gewünschtes Ergebnis : Sydney - Rio de Janeiro - Madrid - Monteral - Lyon
hin bekommen habe ich : Sydney - Rio de Janeiro - Madrid - AUS - Monteral - Lyon
Da ich keine Reinfolge bei den Keys in replacements vorgeben kann, kollidieren der Key 'AUS' mit dem Key '(AUS).
So wird aus (AUS) nicht etwas '', sondern (). Nicht immer, aber hin und wieder.
Zur Zeit sehe ich nur die Möglichkeit, mit mehren replacements dictionaries zu arbeiten, um eine vorgegebene Reihenfolge
einhalten zu können.
Hat jemand eine bessere Idee ?