Hallo Leute,
heute wollte ich ohne Anleitung einfach mal mit der 'find'-Methode drauf los probieren. Ich möchte alle Positionen an denen der Sub-String gefunden wird ausgeben. Aber ich stecke seit 1-2 Stunden fest. Den Plan was ich alles schon versucht habe, den habe ich auch nicht mehr.
Mein Code-Schnipsel wäre hier.
Vielen Dank!
einfaches find rekursiv verwenden
Wenn man nicht weiter kommt, hilft es, Schritt für Schritt auszugeben, welche Werte die einzelnen Variablen haben. Dann merkst Du, dass Du mit `text = text[resultat:]` immer dafür sorgst, dass der Suchtext ganz am Anfang von text steht.
Dann gibt es ganz am Ende noch das Problem, dass find zwar -1 zurückliefert, Du aber trotzdem nochmal positionen erweiterst.
Wenn man einer Variable einen Dummywert geben muß, damit eine while-Schleife startet, hat man eigentlich eine while-True-Schleife, die an der passenden Stelle per break beendet wird.
Jetzt kennt aber `find` ein zweites Argument, was die Sache viel einfacher macht:
Da aber `find` einen problematischen Rückgabewert hat, wenn der Text nicht gefunden wurde, sollte man besser `index` benutzen:
Dann gibt es ganz am Ende noch das Problem, dass find zwar -1 zurückliefert, Du aber trotzdem nochmal positionen erweiterst.
Wenn man einer Variable einen Dummywert geben muß, damit eine while-Schleife startet, hat man eigentlich eine while-True-Schleife, die an der passenden Stelle per break beendet wird.
Code: Alles auswählen
positionen = []
altes_resultat = 0
while True:
resultat = text.find(suche)
if resultat < 0:
break
altes_resultat += resultat
positionen.append(altes_resultat)
altes_resultat += 1
text = text[resultat+1:]
Code: Alles auswählen
positionen = []
aktuelle_position = -1
while True:
aktuelle_position = text.find(suche, aktuelle_position + 1)
if aktuelle_position < 0:
break
positionen.append(aktuelle_position)
Code: Alles auswählen
positionen = []
aktuelle_position = -1
try:
while True:
aktuelle_position = text.index(suche, aktuelle_position + 1)
positionen.append(aktuelle_position)
except ValueError:
pass