Stringvergleichen mit Sonderzeichen

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

Sonntag 19. Dezember 2004, 19:48

Hi

Ich wollte mal Fragen wie ihr folgendes lösen würdet:

2 Strings miteinander vergleichen, jedoch sollen Sonderzeichen ignoriert werden oder umgewandelt werden.

Also mal ein paar Sonderzeichen zur erklärung

Code: Alles auswählen

ä = a = á = à = â
ö = o = ó = ò = ô
ü = u = ú = ù = û
i = î = í
e = é = è = ê
Wenn ein String solche Zeichen enthält, soll er sie wie normale behandeln (a,o,u,e,i, usw).
Soll ich die vorher einfach alle ersetzen oder irgendein RegEx dazu erstellen?
Ich weiss eben nicht ob das mit RegEx möglich ist da ich mich nicht auskenne, falls es möglich ist, würde ich RegEx noch genauer anschauen.

Gruss
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sonntag 19. Dezember 2004, 20:52

Ich würde es einfach ersetzen, mit regexes kenne ich mich nicht aus, aber hier mal ein Howto zum re Modul. Dann kann ich mir ja für die Ferien was vornehmen: regexes lernen :)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
jens
Moderator
Beiträge: 8481
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 20. Dezember 2004, 08:05

Also mit dem normalen .replace() benötigt man allerdings einige anläuft, bis alle Varianten eines Buchstabend "normalisiert" werden...

Mit RE kann man man allerdings quasi eine "oder"-Verknüpfung machen: [äaáàâ]
Wie man jetzt aber konkret ein re.sub() forumliert, welches alle Varianten in einem "konvertiert" weiß ich jetzt so nicht...
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 20. Dezember 2004, 13:38

Na ich würd mal so versuchen:

Code: Alles auswählen

import re
pattern = re.compile('[äaáàâ]+', re.IGNORECASE)
stringreplace = "äaáàâ"
print re.sub(pattern, 'a', stringreplace)
Kenn jemand eine gute regex Doku? Da gibt es doch so ein hübsches O'Reilly Buch, aber sonst?
My god, it's full of CARs! | Leonidasvoice vs Modvoice
powerslide
User
Beiträge: 51
Registriert: Freitag 10. Dezember 2004, 09:05
Wohnort: Erlangen
Kontaktdaten:

Montag 20. Dezember 2004, 14:06

How many people can read hex if only you and dead people can read hex?

There are 10 types of people in the world: Those who understand binary, and those who don't...
joe

Montag 20. Dezember 2004, 14:38

Eigentlich ist das doch eher was für string.translate():

Code: Alles auswählen

import string
s = """ä = a = á = à = â
ö = o = ó = ò = ô
ü = u = ú = ù = û
i = î = í
e = é = è = ê"""
print s.translate(string.maketrans('äáàâöóòôüúùûîíéèê','aaaaoooouuuuiieee'))
Ausgabe:
a = a = a = a = a
o = o = o = o = o
u = u = u = u = u
i = i = i
e = e = e = e

joe
rayo
User
Beiträge: 773
Registriert: Mittwoch 5. November 2003, 18:06
Wohnort: Schweiz
Kontaktdaten:

Montag 20. Dezember 2004, 14:58

Hi

also Translate klingt recht vernünftig, ich werde wahrscheinlich das verwenden.

Danke
Benutzeravatar
jens
Moderator
Beiträge: 8481
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Montag 20. Dezember 2004, 17:31

joe hat geschrieben:Eigentlich ist das doch eher was für string.translate():
Das kenne ich ja noch garnicht! Was es nicht alles gibt...
Wie schnell ist es gegenüber .replace() und RE ???
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 20. Dezember 2004, 17:37

Müssen wir mal benchmarken - ich werd mir gleich mal ein Benchmark schreiben ;)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten