Seite 1 von 1
Text herausfiltern
Verfasst: Freitag 23. Mai 2008, 07:54
von Crazed
Hallo, Ich habe mir eine kleine Funktion geschrieben um den Text zwischen 2 Strings herauszubekommen
Code: Alles auswählen
def _cut(self, string, startstr, endstr):
'''Returns the string between "startstr" and "endstr"'''
if string.find(startstr) or string.find(endstr) == -1:
return -1
else:
return string[string.find(startstr)+len(startstr):string.find(endstr)]
Das funktioniert auch z.b bei diesem String
>>> cut('python ist toll', 'python ', ' toll')
'ist'
Aber bei diesem String klappt es nicht mehr:
http://paste.pocoo.org/show/52993/
-1
Er gibt mir immer nichts oder -1 zurück wenn ich z.B das probiere:
Die Funktion müsste dann ja eigentlich 'be' zurückgeben und nicht -1.
Hat jemand eine Idee?
Re: Text herausfiltern
Verfasst: Freitag 23. Mai 2008, 08:02
von audax
Code: Alles auswählen
def _cut(self, string, startstr, endstr):
'''Returns the string between "startstr" and "endstr"'''
if string.find(startstr) == -1 or string.find(endstr) == -1:
return -1
else:
return string[string.find(startstr)+len(startstr):string.find(endstr)]
So würde ich das wohl machen:
Code: Alles auswählen
import string
def _cut(s, start, end):
'''Returns the string between "startstr" and "endstr"'''
begin, ending = string.find(s, start), string.find(s, end)
if begin != -1 and ending != -1:
return string[begin + len(start): ending]
else:
raise ValueError("Token not found!")
Verfasst: Freitag 23. Mai 2008, 08:05
von Crazed
Danke sehr!

!
Verfasst: Freitag 23. Mai 2008, 08:23
von Crazed
Habs grade noch verbesser, er sucht jetzt nur noch nach dem endstr NACH der Position des startstr:
Code: Alles auswählen
def _cut(self, string, startstr, endstr):
'''Returns the string between "startstr" and "endstr"'''
#Checks if both of the string parts exist in the in "string"
if string.find(startstr) == -1 or string.find(endstr) == -1:
return -1
else:
#Return the text between "startstr" and "endstr"
return string[string.find(startstr)+len(startstr):string.find(endstr, string.find(startstr)+len(startstr))]
Verfasst: Freitag 23. Mai 2008, 08:37
von BlackJack
Alle Lösungen bisher haben aber Probleme wenn die Endzeichenkette auch schon mal *vor* der Startzeichenkette vor kommt, das gilt auch noch für die letzte Lösung von Crazed.
Lösungsvorschlag:
Code: Alles auswählen
def cut(string, start, end):
start_index = string.index(start) + len(start)
end_index = string.index(end, start_index)
return string[start_index:end_index]
Wenn `start` oder `end` nicht gefunden werden, dann löst das jeweilige `index()` einen `ValueError` aus.
@Crazed: Wenn `self` in einer Methode nicht verwendet wird, ist das oft ein Zeichen, dass es sich eigentlich um eine Funktion handelt und nicht in eine Klasse gehört.
"Spezielle" Rückgabewerte, die einen Fehler signalisieren sind sehr unschön, statt der -1 solltest Du besser mit Ausnahmen arbeiten.
@audax: Das `string`-Modul sollte man nicht für Funktionen benutzen, die es auch als Methoden auf Zeichenketten gibt.
Verfasst: Freitag 23. Mai 2008, 08:39
von audax
BlackJack hat geschrieben:
@audax: Das `string`-Modul sollte man nicht für Funktionen benutzen, die es auch als Methoden auf Zeichenketten gibt.
Ich wollt mir nur das explizite umwandeln zum string sparen...aber hast ja recht.
Verfasst: Freitag 23. Mai 2008, 08:45
von Trundle
@audax: In Zeile 8 wirfst du `s` und `string` durcheinander.
Verfasst: Freitag 23. Mai 2008, 17:03
von audax
Trundle hat geschrieben:@audax: In Zeile 8 wirfst du `s` und `string` durcheinander.
gnah....man sollte Code vorher testen
