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

Freitag 16. September 2005, 22:25

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
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 16. September 2005, 22:42

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 Modvoice
Gast

Freitag 16. September 2005, 23:24

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
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 16. September 2005, 23:28

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 Modvoice
Gast

Freitag 16. September 2005, 23:41

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

Freitag 16. September 2005, 23:45

aaaah soory ich hab selbst was falsch gemacht. PERFEKT!

Vielen Dank!
Benutzeravatar
jens
Moderator
Beiträge: 8481
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Samstag 17. September 2005, 07:23

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten