Seite 1 von 1

Stringvergleichen mit Sonderzeichen

Verfasst: Sonntag 19. Dezember 2004, 19:48
von rayo
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

Verfasst: Sonntag 19. Dezember 2004, 20:52
von Leonidas
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 :)

Verfasst: Montag 20. Dezember 2004, 08:05
von jens
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...

Verfasst: Montag 20. Dezember 2004, 13:38
von Leonidas
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?

Verfasst: Montag 20. Dezember 2004, 14:06
von powerslide

Verfasst: Montag 20. Dezember 2004, 14:38
von joe
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

Verfasst: Montag 20. Dezember 2004, 14:58
von rayo
Hi

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

Danke

Verfasst: Montag 20. Dezember 2004, 17:31
von jens
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 ???

Verfasst: Montag 20. Dezember 2004, 17:37
von Leonidas
Müssen wir mal benchmarken - ich werd mir gleich mal ein Benchmark schreiben ;)