Seite 1 von 1

Großbuchstaben durch Kleinbuchstaben ersetzen ?

Verfasst: Donnerstag 2. November 2006, 09:34
von snakeseven
Hi,
verstehe was an dem re-Modul nicht. Folgende Verwendungen funktionieren:

Code: Alles auswählen

>>> import re
>>> t = "Dieser Text besteht aus kleinen und GROSSEN Buchstaben"
>>> z = re.findall("[A-Z]",t)
>>> print z
['D', 'T', 'G', 'R', 'O', 'S', 'S', 'E', 'N', 'B']
>>> 
>>> z = re.findall("[a-z]",t)
>>> print z
['i', 'e', 's', 'e', 'r', 'e', 'x', 't', 'b', 'e', 's', 't', 'e', 'h', 't', 'a', 'u', 's', 'k', 'l', 'e', 'i', 'n', 'e', 'n', 'u', 'n', 'd', 'u', 'c', 'h', 's', 't', 'a', 'b', 'e', 'n']
>>> 
>>> z = re.sub("[A-Z]","x",t)
>>> print z
xieser xext besteht aus kleinen und xxxxxxx xuchstaben
Das Erstezen von Großbuchstaben durch Kleinbuchstaben funktioniert dagegen nicht.

Code: Alles auswählen

>>> z = re.sub("[A-Z]","[a-z]",t)
>>> print z
[a-z]ieser [a-z]ext besteht aus kleinen und [a-z][a-z][a-z][a-z][a-z][a-z][a-z] [a-z]uchstaben
>>> 
Wo liegt der Fehler ?

Gruss, Seven

Verfasst: Donnerstag 2. November 2006, 09:52
von BlackJack
Das geht mit regulären Ausdrücken nicht. Das Ersetzungs"muster" kennt nur Rückreferenzen auf Gruppen im regulären Ausdruck. Alles andere ist ganz normale Zeichenkette.

Aber es muss ja nicht immer gleich ein regulärer Ausdruck sein:

Code: Alles auswählen

In [2]: "Dieser Text besteht aus kleinen und GROSSEN Buchstaben".lower()
Out[2]: 'dieser text besteht aus kleinen und grossen buchstaben'

Verfasst: Donnerstag 2. November 2006, 10:04
von snakeseven
Ha, gefällt mir !
Thanx, Seven

Verfasst: Donnerstag 2. November 2006, 16:28
von birkenfeld
Was dagegen funktioniert (ist in diesem Fall natürlich idiotisch, da lower() auch für ganze Strings funktioniert) ist:

Code: Alles auswählen

>>> z = re.sub("[A-Z]", lambda match: match.group().lower(), t)
>>>