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

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

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

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

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