Seite 1 von 1

Weil while endlos schleift

Verfasst: Mittwoch 4. Juni 2008, 16:02
von BreathBrightBrother
Hallo,

Ich habe noch ein Problem.
Ich will eine Menge von RegExen solange über einen String laufen lassen, bis der leer ist.
Aber ich gerate in eine Endlosschleife. Zwar wird der String nach jedem Treffer abgeschnitten (zweites Print zeigt das), aber irgendwie merkt es die while-Schleife nicht.
Kann da wer helfen?

BBB

Code: Alles auswählen

def regexaufbuffer(regexliste,buffe,dateizumreinschreiben):
	zaehler = 0
	while buffe:
		print buffe
		if zaehler == 4:
			for i in range(0,len(buffe)):
				string = buffe[i]+"\t"+"Unknown"
				dateizumreinschreiben.write(string)
				buffe.replace(buffe[i],"")
		for tupel in regexliste:
			regex = tupel[0]
			regaus = re.compile(regex)
			matched = regaus.match(buffe)
			if matched:
				print "Juhu"
			treffer = regaus.finditer(buffe)
			if matched:
				for x in treffer:
					schreibstring = x.group(0)+"\t"+tupel[1]
					dateizumreinschreiben.write(schreibstring)
					x = matched.start()
					y = matched.end()
					buffe.replace(buffe[x:y],"")
					print buffe
					print "hier was replaced"
					zaehler = 0
					break
			else:
				zaehler = zaehler+1

Verfasst: Mittwoch 4. Juni 2008, 16:08
von rayo
Hi

Strings können nicht verändert werden und darum gibt dir string.replace("","") einen neuen veränderten String zurück, nur du verwirst den sofort wieder.

buffe = buffe.replace() in Zeile 23 soltle was bewirken :)

Gruss

Verfasst: Mittwoch 4. Juni 2008, 16:12
von BreathBrightBrother
Super! :D Es bewirkt etwas, aber noch nicht ganz das, was es soll.

Gibt es eine Operation, die nur das erste Vorkommen eines Zeichen in einem String löscht?

BBB

Verfasst: Mittwoch 4. Juni 2008, 16:17
von EyDu
BreathBrightBrother hat geschrieben:Gibt es eine Operation, die nur das erste Vorkommen eines Zeichen in einem String löscht?
Schau doch mal in die Dokumentation ;-)

Verfasst: Mittwoch 4. Juni 2008, 16:24
von BreathBrightBrother
Kannst du mir da wenigstens n Kapitel nennen?
Ich finde immer nur translate, wenn ich da nach strings und delete suche

Verfasst: Mittwoch 4. Juni 2008, 16:31
von EyDu
Es reicht, wenn du nach "replace" suchst. Schau dir da mal den letzten Parameter an.

Verfasst: Mittwoch 4. Juni 2008, 16:34
von BreathBrightBrother
Hmmm.... replace habe ich ja benutzt.
Ich glaube das Problem ist das
for x in treffer, dass halt für jeden Treffer, den der RE rausspuckt auch das erste Vorkommen löscht.
Sprich wenn er ein Leerzeichen gefunden hat, erstmal jedes Leereichen löscht und mich den Rest der Wörter nicht mehr erkennen lässt.
Ich scheine ja auf treffer[0] irgendwie nicht zugreifen zu können.

Gibt es denn eine Möglichkeit, zu sagen: trotz dem "for": tu's nur einmal?

Hier bin ich wirklich völlig planlos :(

Verfasst: Donnerstag 5. Juni 2008, 07:27
von skypa
Erschießt mich nicht gleich wenns falsch is!

Wenns nur einmal passieren soll könntest du glaub ich einfach nur ne Variable setzen die wie ne Ampel funktioniert.
und fragst den Zustand ab den die Variable hat, in der for schleife. verstehste ? :P

Verfasst: Donnerstag 5. Juni 2008, 08:28
von EyDu
Ich weiss nicht genau, ob ich deinen lesten Post ganz richtig verstanden habe, aber eine for-Schleife kannst du mit "break" verlassen.