Großbuchstaben durch Kleinbuchstaben ersetzen ?

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
snakeseven
User
Beiträge: 405
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Großbuchstaben durch Kleinbuchstaben ersetzen ?

Beitragvon snakeseven » Donnerstag 2. November 2006, 09:34

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
BlackJack

Beitragvon BlackJack » Donnerstag 2. November 2006, 09:52

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'
Benutzeravatar
snakeseven
User
Beiträge: 405
Registriert: Freitag 7. Oktober 2005, 14:37
Wohnort: Berlin
Kontaktdaten:

Beitragvon snakeseven » Donnerstag 2. November 2006, 10:04

Ha, gefällt mir !
Thanx, Seven
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Beitragvon birkenfeld » Donnerstag 2. November 2006, 16:28

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)
>>>

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot], Google [Bot]