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

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
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?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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".
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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 :)
Gast

aaaah soory ich hab selbst was falsch gemacht. PERFEKT!

Vielen Dank!
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten