Seite 1 von 2

Re: String Vergleich mit re.search()

Verfasst: Donnerstag 5. März 2015, 13:24
von Hyperion
BlackJack hat geschrieben:@Hyperion: Ich dachte KDE bekommt man auch unter Windows zum laufen? Ausserdem liesse sich so ein Timer doch leicht in Python selber programmieren. :-)
Ich habe das noch nie probiert - in meiner Freizeit rühre ich Windows aber auch selten an. Aber tatsächlich habe ich damit schon mal geliebäugelt, einen solchen selber zu timen :-)

Re: String Vergleich mit re.search()

Verfasst: Donnerstag 5. März 2015, 14:37
von KuniBert
BlackJack hat geschrieben:@KuniBert: Erstmal brauchst Du dafür keinen regulären Ausdruck, eine Zeichenkette in einer anderen suchen geht einfacher mit dem ``in``-Operator:

Code: Alles auswählen

In [1]: 'pa' in 'spam'
Out[1]: True

In [2]: 'rot' in 'spam'
Out[2]: False
Wenn Du genau wissen willst was Deine Werte enthalten, dann lass Dir mal den Typ ausgeben, den bekommt man mit der `type()`-Funktion, und dann die `repr()`-Darstellung statt der Zeichenkette. Bestimmte Zeichen siehst Du sonst nämlich nicht oder man übersieht sie zu leicht. Zum Beispiel Leerzeichen am Ende einer Zeichenkette oder so Sachen wie Nullbytes und andere Bytewerte die in der Ausgabe oft überhaupt nicht sichtbar sind.

Ich habe die `repr()`-Darstellung mir ausgeben lassen ´. Die Ergebnisse sehen wie folgt aus:
aus ocr: ' B-KS 8583\n\n '
aus txt: ' B-KS 8583\n '
also unterschiedlich? Was bedeuten hier die \n und wie bekomme ich die Beiden gleich?
Ich habe auch nichts weiter über den ``in``-Operator gefunden. Wie würde da ein Code aussehen? so?

Code: Alles auswählen

if a in b:
    print "yes"
else:
    print "no"

Re: String Vergleich mit re.search()

Verfasst: Donnerstag 5. März 2015, 14:45
von Hyperion
KuniBert hat geschrieben: Ich habe die `repr()`-Darstellung mir ausgeben lassen ´. Die Ergebnisse sehen wie folgt aus:
aus ocr: ' B-KS 8583\n\n '
aus txt: ' B-KS 8583\n '
also unterschiedlich? Was bedeuten hier die \n und wie bekomme ich die Beiden gleich?
Das ist die Repräsentation des Zeilenumbruchs (bei Unixoiden Systemen). Probiere es doch aus! BlackJack hat Dir das doch schon gezeigt. Öffne eine Python-Shell Deiner Wahl und tippe das dort mal ein :-)

Ich würde diese Whitspaces jedoch vor irgend welchen Vergleichen entfernen. Dafür gibt es die ``strip``-Methode auf Strings.

Re: String Vergleich mit re.search()

Verfasst: Donnerstag 5. März 2015, 14:59
von KuniBert
So hat es funktioniert. Ist das ok?

Code: Alles auswählen

a = ocr.replace('\n',"")
b = kenndb.replace('\n',"")

if a in b:
    print "yes"
else:
    print "no"

OUT: yes

Re: String Vergleich mit re.search()

Verfasst: Donnerstag 5. März 2015, 15:33
von Hyperion
KuniBert hat geschrieben:So hat es funktioniert. Ist das ok?
Nein! (Weil das total ineffizient ist!) Ich hatte Dir doch schon ``strip`` genannt. Außerdem werden damit auch andere und vor allem führende Whitespaces entfernt.

Und Du hast es vermutlich wieder nicht in einer Shell probiert - denn das ist ja trivial und erfordert keinen komplizierten ``if...else``-Ausdruck:

Code: Alles auswählen

scanned =  ' B-KS 8583\n\n '.strip()
given = ' B-KS 8583\n '.strip()
scanned in given
> True
Im ürbigen würde man das ``strip`` bereits beim Lesen aus der Textdatei ausführen und nicht *jedes* Mal unmittelbar vor dem Vergleich.

Re: String Vergleich mit re.search()

Verfasst: Donnerstag 5. März 2015, 16:00
von KuniBert
Ah ok ich glaub jetzt hab ich es verstanden. Danke für deine Geduld. Wie gesagt absolut keine Programmierkenntnisse :oops:

Re: String Vergleich mit re.search()

Verfasst: Donnerstag 5. März 2015, 16:29
von Hyperion
Kein Problem :)

Ich hoffe Du denkst auch noch daran! (Und versuchst das zu verstehen, was cofi da als Tipp gibt!)