String Vergleich mit re.search()

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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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 :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
KuniBert
User
Beiträge: 11
Registriert: Mittwoch 4. März 2015, 19:41

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"
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
KuniBert
User
Beiträge: 11
Registriert: Mittwoch 4. März 2015, 19:41

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
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

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.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
KuniBert
User
Beiträge: 11
Registriert: Mittwoch 4. März 2015, 19:41

Ah ok ich glaub jetzt hab ich es verstanden. Danke für deine Geduld. Wie gesagt absolut keine Programmierkenntnisse :oops:
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Kein Problem :)

Ich hoffe Du denkst auch noch daran! (Und versuchst das zu verstehen, was cofi da als Tipp gibt!)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten