Seite 1 von 1

Reguläre Ausdrücke / Suchen-Ersetzen / Dynamische Variablen

Verfasst: Freitag 16. September 2005, 22:25
von Gast
Hallo,

habe schon viel gesucht aber ich komme einfach nicht richtig weiter.

ich suche das pendant in Python zum folgenden PHP-Code:

Code: Alles auswählen

    while(preg_match_all("<!--{([-A-Za-z0-9&._]*)}-->",$text,$matches)) {
        foreach($matches[1] as $link) {
            $text = str_replace("<!--{".$link."}-->", $$link, $text);
            unset($matches);
        }
    }
Es werden alle tags gesucht die die form haben : <!--{...}-->
Das Tag wird dann anschließend erstzt, und zwar mit dem Inhalt der Variable, die den Taginhalt als Namen hat


Könnt ihr mir irgendwie etwas helfen?

Verfasst: Freitag 16. September 2005, 22:42
von Leonidas
Wie wäre es mit einer solchen Lösung:

Code: Alles auswählen

import re

markup = '<!--{about}-->'
replaces = {'about' : 'ready'}

r = re.compile(r'(?<=<!--{).*(?=}-->)')
for match in r.findall(markup):
    markup = markup.replace('<!--{' + match + '}-->', replaces[match])

print markup
Da sag mal einer PHP ist für Anfänger 8)

Verfasst: Freitag 16. September 2005, 23:24
von Gast
Vielen Dank, da sist ja schonmal sehr gut, jedoch ist 'markup' und 'replaces' ja völlig unbekannt, die ergeben sich erst beim Parsen des gesamttextes. Oder hab da jetzt was falsch gelsen?

Verfasst: Freitag 16. September 2005, 23:28
von Leonidas
Nein, markup ist das was du einfütterst, in diesem Fall war es sehr kutz, weil ich keine Lust hatte mir einen langen Text auszudenken.

replaces ist die Liste der zu ersetzenden Sachen, also praktisch deine "dynamischen Variablen".

Verfasst: Freitag 16. September 2005, 23:41
von Gast
stimmt war mir erst nichht so klar, er macht aber irgendwie gar nix mehr wenn ich folgende sachen vorgebe:

markup = '<!--{abc}-->xxx<!--{def}-->'
replaces = {'abc' : 'ooo', 'def' : 'uuu'}


wenn das im endeffekt geht dann hätte ich die perfekte Endlösung :)

Verfasst: Freitag 16. September 2005, 23:45
von Gast
aaaah soory ich hab selbst was falsch gemacht. PERFEKT!

Vielen Dank!

Verfasst: Samstag 17. September 2005, 07:23
von jens
Ich würde allerdings nicht mit re.findall() und replace() arbeiten, sondern direkt mit re.sub():

Code: Alles auswählen

import re

content = '<!--{abc}-->xxx<!--{def}-->'

replaces = {
    'abc' : 'ooo',
    'def' : 'uuu'
}


def handle_tag( matchobj ):
    tag = matchobj.group(2)
    if replaces.has_key( tag ):
        return replaces[tag]

    print "tag '%s' unbekannt." % tag


content = re.sub( "(<!--{(.*?)}-->)", handle_tag, content )

print content