Weil while endlos schleift

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
BreathBrightBrother
User
Beiträge: 11
Registriert: Mittwoch 4. Juni 2008, 08:13

Mittwoch 4. Juni 2008, 16:02

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
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Mittwoch 4. Juni 2008, 16:08

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
BreathBrightBrother
User
Beiträge: 11
Registriert: Mittwoch 4. Juni 2008, 08:13

Mittwoch 4. Juni 2008, 16:12

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
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Mittwoch 4. Juni 2008, 16:17

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 ;-)
BreathBrightBrother
User
Beiträge: 11
Registriert: Mittwoch 4. Juni 2008, 08:13

Mittwoch 4. Juni 2008, 16:24

Kannst du mir da wenigstens n Kapitel nennen?
Ich finde immer nur translate, wenn ich da nach strings und delete suche
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Mittwoch 4. Juni 2008, 16:31

Es reicht, wenn du nach "replace" suchst. Schau dir da mal den letzten Parameter an.
BreathBrightBrother
User
Beiträge: 11
Registriert: Mittwoch 4. Juni 2008, 08:13

Mittwoch 4. Juni 2008, 16:34

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 :(
skypa
User
Beiträge: 97
Registriert: Freitag 5. Januar 2007, 03:13

Donnerstag 5. Juni 2008, 07:27

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
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Donnerstag 5. Juni 2008, 08:28

Ich weiss nicht genau, ob ich deinen lesten Post ganz richtig verstanden habe, aber eine for-Schleife kannst du mit "break" verlassen.
Antworten