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

reguläre ausdrücke in python

Beitragvon perlverwöhnter gast » Freitag 30. Juli 2004, 10:30

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

Beitragvon Milan » Freitag 30. Juli 2004, 11:17

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

Beitragvon perlverwöhnter gast » Freitag 30. Juli 2004, 11:25

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

Beitragvon Milan » Freitag 30. Juli 2004, 11:46

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

Beitragvon perlverwöhnter gast » Freitag 30. Juli 2004, 12:46

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

Beitragvon Milan » Freitag 30. Juli 2004, 14:00

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder