reguläre ausdrücke in python

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
perlverwöhnter gast

hi python-creaks.
ich als alter gelegenheits perl-programmierer habe seit kurzem die ehre python programmieren zu dürfen.

ich habe nun folgendes problem mit regulären ausdrücken:

sagen wir mal ich will auf folgenden ausdruck matchen:
elem = 2332321dfsdfafdfdsafdsf(trfdgged)dffadfddffddf21312321

es soll allerding nur der teil in der klammer ersetz werden, der rest soll bestehen bleim.
gibt es sowas wie re.sub ('dfsdfafdfdsafdsf(trfdgged)dffadfddffddf','$1, elem)

in perl gibt mir $1 an der stelle den geklammerten teil, der rest bleibt besten. so etwas muss es doch sicher auch in python geben, oder?
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Das gehört nach Allgemeine Fragen, aber du hast recht, das gibt es auch :wink: . Nimm statt "$1" einfach "\1" und es wird laufen.
perlverwöhnter gast

mh, also

elem = re.sub('.(=).','\1',elem)
sys.stdout.write(elem),sys.stdout.write(" ")

von

TIME=04-07-28 15:22:48

gibt mir jetzt sowas aus:

TIM☺4-07-28 15:22:48
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

Hi. Du musst dafür auch raw_Strings verwenden, ansonsten musst du "\\1" schreiben.

Also noch mal deutlicher:
du willst von "abc123def" meinetwegen die Zahlen 123 ersetzen und den Rest da lassen wo er war. Mit sub ersetzt du den kompletten Ausdruck, nach dem gematcht wird. Also musst den Rest auch wieder einsetzen. Das ginge so:

Code: Alles auswählen

import re
text="abc123def"
print re.sub(r"([a-z])*\d+([a-z])*",r"\1neuer Teil\2",text)
Ist halt mehr dafür gedacht, dass man die Gruppen rausnimmt und wieder ins Ersetzungsmuster einbaut, statt die Gruppe zu ersetzen.
perlverwöhnter gast

danke dir, das ist genau das, was ich seit gestern mittag suche.

allerdings ist dir ein tippfehler unterlaufen ;-D

fast richtig:print re.sub(r"([a-z])*\d+([a-z])*",r"\1neuer Teil\2",text)
ganz richtig:print re.sub(r"([a-z]*)\d+([a-z]*)",r"\1neuer Teil\2",text)

was schulde ich dir?
Milan
User
Beiträge: 1078
Registriert: Mittwoch 16. Oktober 2002, 20:52

perlverwöhnter gast hat geschrieben:was schulde ich dir?
*hehe* :P :wink: zur Zeit reicht mir nen Platz im Schatten, ist doch recht warm heute...
Antworten