Seite 2 von 2
Verfasst: Samstag 23. Januar 2010, 20:55
von snafu
Ich hab's jetzt erstmal auf das reine Tokenizing runtergebrochen. Der Rest folgt später.
Code: Alles auswählen
_TEXT = 0
_SYMBOL = 1
def _tokenize(symbols, s):
expr = '(%s)' % '|'.join(re.escape(sym) for sym in symbols)
for i, value in enumerate(re.split(expr, s)):
if value:
yield i % 2, value
Soll halt nicht Teil der API sein, daher die Unterstriche.
Verfasst: Samstag 23. Januar 2010, 21:29
von derdon
Warum schreibst du das nicht als Generator Expression? Ungetestet:
Code: Alles auswählen
def _tokenize(symbols, s):
expr = '(%s)' % '|'.join(re.escape(sym) for sym in symbols)
return ((i % 2, value) for i, value in enumerate(re.split(expr, s)) if value)
Verfasst: Samstag 23. Januar 2010, 21:29
von str1442
Hier noch eine Variante für die, die (so wie ich) keinen Vertrag mit RE haben ...
Denn wer den Vertrag eingeht, wird sowieso früher oder später geholt. 
Verfasst: Samstag 23. Januar 2010, 23:30
von numerix
snafu hat geschrieben:@numerix: In dem speziellen Fall finde ich RE's handlicher.
Ja, ganz gewiss sind sie das. Elegant ist meine Lösung nicht.
Verfasst: Sonntag 24. Januar 2010, 00:38
von snafu
derdon hat geschrieben:Warum schreibst du das nicht als Generator Expression?
Weil ich verschachtelte GE's nicht so lesbar finde wie beim "altmodischen" Weg. Momentan versuche ich, solche Konstrukte zu vermeiden. Aber vielleicht ist es auch nur so eine Phase von mir... ^^