string diff

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
SElsner
User
Beiträge: 15
Registriert: Dienstag 22. Juli 2008, 14:24

Hallo,

ich habe zwei strings wie z.B.:
"eins1_v2.jpg"
"eins2_v2.jpg"

es ändert sich immer genau eine Zahl, wo im string weiß ich aber nicht (im Beispiel eben die zahl nach "eins").
Nun möchte ich herausfinden, an welcher Position diese sich ändernde Zahl steht.
Die Triviale Herangehensweise wäre mit nem for loop die chars durchzugehen und zu vergleichen. Das ist aber wohl langsam und unelegant. Hat jemand einen besseren Vorschlag? google und difflib helfen mir nicht sonderlich weiter...

Danke schon mal

Sebastian
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Wenn die erste Ziffernfolge im String interessant ist:

Code: Alles auswählen

import re
text = 'eins1_v2.jpg'
m = re.search(r'\d+', text)
if m:
    print 'gefunden bei', m.start()
else:
    print 'nicht gefunden
Kann es sein, dass du aus "eins1_v2.jpg" automatisch "eins2_v2.jpg" machen willst?
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Benutzeravatar
HerrHagen
User
Beiträge: 430
Registriert: Freitag 6. Juni 2008, 19:07

Wenn du wirklich den ersten Unterschied finden willst, wirst du wohl an einer Schleife nicht vorbeikommen. Das muss aber ja nicht schlimm sein:

Code: Alles auswählen

>>> def find_first_diff(str1, str2):
	for index, (a, b) in enumerate(zip(str1, str2)):
		if a != b: return index
		
>>> find_first_diff("abc1defg", "abc2defg")
3
Dei dem Anwendungsfall der sich aus deinem Beispiel erahnen lässt, dürfte Geschwindigkeit kaum eine Rolle spielen. Bei mir benötigt das obige Beispiel 0,000006s - das dürfte schnell genug sein.

MFG HerrHagen
SElsner
User
Beiträge: 15
Registriert: Dienstag 22. Juli 2008, 14:24

Hey,

vielen Danke fuer die antworten. genau nach dem re.start(0 hab ich gesucht!

Gruss

Sebastian
Antworten