ich habe ein kleines Problem. Was muss ich bei einem Aufruf von re.findall() z.B.
Code: Alles auswählen
sign = re.findall("^[A-Za-z]", word)
Hab verschiedene Sachen ausprobiert, bin aber auf keinen grünen Zweig gekommen.
Code: Alles auswählen
sign = re.findall("^[A-Za-z]", word)
Gegenfrage noch mal, welche Zeichen willst du denn getrennt von den Buchstaben haben?Clython hat geschrieben:wenn ich will, dass er mir alle Buchstaben (auch mit Umlauten, franz., span. etc. Sonderzeichen [äöü, àéè etc.]) als Buchstaben erkennt?
Code: Alles auswählen
print "".join([chr(i) for i in range(255)])
Code: Alles auswählen
sign = re.findall("[A-Za-zŠŽšžŸÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÑÒÓÔÕÖÙÚÛÜÝßàáâãäåæçèéêëìíîïðñòóôõöùúûüý]", word)
Code: Alles auswählen
outfile = open("char.txt", "w")
for i in range(256):
zeile = str(i) + " " + chr(i) + "\n"
outfile.write(zeile)
outfile.close()
Wie lautet denn die Ausgabe von re.findall?Clython hat geschrieben:Hab schon verschiedene Varianten davon versucht. Funktioniert nicht!
Code: Alles auswählen
IDLE 1.0.3
>>> import re
>>> res = re.findall("ö", "Schmödeldödel")
>>> print res
['\xf6', '\xf6']
Code: Alles auswählen
>>> res = replace("\xf6", "oe", res)
Traceback (most recent call last):
File "<pyshell#7>", line 1, in -toplevel-
res = replace("\xf6", "oe", res)
File "d:\python23\lib\string.py", line 370, in replace
return s.replace(old, new, maxsplit)
TypeError: expected a character buffer object
Liegt vielleicht an verschiedenen Zeichensätze? Such mal im Forum nach "codec"Clython hat geschrieben: Erstaunlicherweise zeigt mir der Python-Prompt immer was anderes an. Wenn ich ö benutze, zeigt er ÷ an, wenn ich é benutze, zeigt er ù an. Woran liegt das?
Code: Alles auswählen
import sys
encoding = sys.getfilesystemencoding()
a = u"Hallö"
print encoding, repr(a.encode(encoding))
print "utf-8", repr(a.encode("utf-8"))
print "latin-1", repr(a.encode("latin-1"))
Ist dafür aber 255 Zeilen lang, ohne dass man was über das Problem erfährt... Das hab ich zum Beipsiel erst gerade eben durch dein Codestückchen.Clython hat geschrieben:Idle spuckt das gleiche aus wie die Shell:IDLE hat doch genau das gemacht, was du gesagt hast... finde alle "ö" also gibt er dir alle ö zurück, die im Text vorkommen.Code: Alles auswählen
IDLE 1.0.3 >>> import re >>> res = re.findall("ö", "Schmödeldödel") >>> print res ['\xf6', '\xf6']
Übrigens auch noch interessant:Code: Alles auswählen
>>> res = replace("\xf6", "oe", res) Traceback (most recent call last): File "<pyshell#7>", line 1, in -toplevel- res = replace("\xf6", "oe", res) File "d:\python23\lib\string.py", line 370, in replace return s.replace(old, new, maxsplit) TypeError: expected a character buffer object
Replace als Funktion des Moduls String ist veraltet. wie du aus der obigen Syntax erkennen kannst, hast du ihm gerade gesagt, er soll im String "ö" alle "oe" durch res ersetzen. Ich glaube kaum, dass das du das so ausdrücken wolltest . Nimm lieber die methode replace, die ist auch einfacher zu rufen:replace(str, old, new[, maxreplace])
Return a copy of string str with all occurrences of substring old replaced by new. If the optional argument maxreplace is given, the first maxreplace occurrences are replaced.Code: Alles auswählen
text="Schmödeldödel" text=text.replace("ö","oe")
Und nur so als Kommentar, die Liste verbraucht gerade mal ca. 1500 Byte. Ich denke das wird die Datenbank noch verkraften...
Das hilft mir aber damit noch nicht weiter. Wozu ist jetzt dieses repr() gut. Python.org gibt keine brauchbare Auskunft.Clython hat geschrieben:Hab da was lustiges gefunden, das Dookie mal gepostet hatte:
Damit sollte es eigentlich gehen.Code: Alles auswählen
import sys encoding = sys.getfilesystemencoding() a = u"Hallö" print encoding, repr(a.encode(encoding)) print "utf-8", repr(a.encode("utf-8")) print "latin-1", repr(a.encode("latin-1"))
Aber wozu ist eigentlich repr() gut?[/code]
Code: Alles auswählen
In [26]: re.findall("(\w+)", "Käse kuchen Kartöffel Kar23132", re.UNICODE)
Out[26]: ['K\xc3', 'se', 'kuchen', 'Kart\xc3', 'ffel', 'Kar23132']